Qt 向单元格中写入日期时间数据–设置单元格格式

  • Post author:
  • Post category:其他


在Qt QTableView导出Excel的过程中出现了日期显示的问题。
image.png

如图所示,图中“2019/11/15 23:26:39”在单元格中只显示了分和秒。

Excel中单元格设置为“日期+时+分”的格式之后按该格式显示。

image.png
image.png

可以看到,设置过的单元格得到了改变,未经过设置的单元格没有变。

所以我们只要在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()

的前后关系不能颠倒。需要先添加数值,再修改单元格格式,否则会失效。

参考文章:

  1. https://www.cnblogs.com/felix-wang/p/6281558.html
  2. https://blog.csdn.net/xiexingshishu/article/details/44624573



版权声明:本文为weijifen000原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。