在Qt QTableView导出Excel的过程中出现了日期显示的问题。
如图所示,图中“2019/11/15 23:26:39”在单元格中只显示了分和秒。
Excel中单元格设置为“日期+时+分”的格式之后按该格式显示。
可以看到,设置过的单元格得到了改变,未经过设置的单元格没有变。
所以我们只要在Qt的代码中设置该单元格的格式即可。
QAxObject *excel = new QAxObject;
if (excel->setControl("Excel.Application")) //连接Excel控件
{
excel->dynamicCall("SetVisible (bool Visible)","false");//不显示窗体
excel->setProperty("DisplayAlerts", false);//不显示任何警告信息。如果为true那么在关闭是会出现类似“文件已修改,是否保存”的提示
QAxObject *workbooks = excel->querySubObject("WorkBooks");//获取工作簿集合
workbooks->dynamicCall("Add");//新建一个工作簿
QAxObject *workbook = excel->querySubObject("ActiveWorkBook");//获取当前工作簿
QAxObject *worksheet = workbook->querySubObject("Worksheets(int)", 1);
int i,j;
//QTableView 获取列数
int colcount=table->model()->columnCount();
//QTableView 获取行数
int rowcount=table->model()->rowCount();
for(i=0;i<rowcount;i++) //行数
{
for (j=0;j<colcount;j++) //列数
{
QModelIndex index = table->model()->index(i, j);
QString strdata=table->model()->data(index).toString();
QAxObject *cell =worksheet->querySubObject("Cells(int,int)", i, j);
cell->dynamicCall("SetValue(const QString&)", strdata);
if(j==0){
cell->setProperty("NumberFormatLocal", "yyyy/m/d h:mm");
}
}
}
}
注意这里
cell->dynamicCall()
和
cell->setProperty()
的前后关系不能颠倒。需要先添加数值,再修改单元格格式,否则会失效。
参考文章:
- https://www.cnblogs.com/felix-wang/p/6281558.html
- https://blog.csdn.net/xiexingshishu/article/details/44624573
版权声明:本文为weijifen000原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。