匯入匯出資料到csv由於語法簡單,適用場景有限,於是乎還是必須再造一個輪子匯出資料到xls,在經歷過數十年的專案實戰經驗中不斷調整和優化。尤其記得當初第一個版本v0.01大概在2011年左右完成的,當時是公司專案執行在嵌入式板子上,需要匯出警情記錄,拷貝到電腦上列印,由於嵌入式根本沒有也不可能去安裝excel等軟體,硬著頭皮去研究了xml格式的xls檔案,按照那個規則組合成簡單的匯出資料,這個思路想法理論上比QtXlsx要早,我也是後面大概在2015年後才發現有QtXlsx這個開源的輪子,而且思路不謀而合,都是採用xml格式的資料。QtXlsx主打各種格式資料單元格做成一個完成的通用的元件等,而我這個輪子更傾向於具體應用場景,直接面對傻瓜使用者,傳入表名、欄位集合幾個簡單的資訊(現在直接放到了結構體資料),就能直接刷刷的匯出資料,甚至簡單到現在支援直接傳入QTableWidget、QTableView控制元件就行,不要太簡單爽歪歪。
結構體支援的引數:
QStringList frmDataOut2::getContent()
{
QStringList content;
QString sql = QString("select * from MsgInfo limit %1").arg(100);
QSqlQuery query;
if (!query.exec(sql)) {
return content;
}
//迴圈遍歷資料
while (query.next()) {
QStringList list;
for (int i = 0; i < column; i++) {
list << query.value(i).toString();
}
content << list.join(";");
}
return content;
}
void frmSimple::on_btnXls_clicked()
{
//設定結構體資料
DataContent dataContent;
//填充內容
dataContent.content = getContent();
//設定列名列寬
dataContent.columnNames = columnNames;
dataContent.columnWidths = columnWidths;
//設定檔名
dataContent.fileName = "d:/0.xls";
//設定表名
dataContent.sheetName = "測試資訊";
//呼叫靜態函數儲存
DataXls::saveXls(dataContent);
//開啟剛才匯出的檔案
QUIHelper::openFile(dataContent.fileName, "匯出測試資訊");
}