在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