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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章