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

在Qt QTableView导出Excel的过程中出现了日期显示的问题。image.png
如图所示,图中“2019/11/15 23:26:39”在单元格中只显示了分和秒。
Excel中单元格设置为“日期+时+分”的格式之后按该格式显示。
image.pngimage.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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章