一、配置QtXlsx
1.1 下載解壓QtXlsxWriter(在github下載即可)
網址:https://github.com/dbzhang800/QtXlsxWriter
1.2 使用qt運行
-
點擊qtxlsx.pro運行QtXlsxWriter
-
選擇DesktopQt51211MSVC201564bit編譯器(選擇自己本地電腦qt安裝的編譯器即可)
-
編譯運行(debug或release都行)
1.3 移植
1、拷貝 D:\xlsxtool\QtXlsxWriter-master\build-qtxlsx-DesktopQt51211MSVC201564bit-Debug\include\ 里的QtXlsx到C:\Qt\Qt5.12.11\5.12.11\msvc201564\include。
2、拷貝 D:\xlsxtool\QtXlsxWriter-master\QtXlsxWriter-master\src\xlsx的所有頭文件到C:\Qt\Qt5.12.11\5.12.11\msvc201564\include\QtXlsx中。
3、拷貝 D:\xlsxtool\QtXlsxWriter-master\build-qtxlsx-DesktopQt51211MSVC201564bit-Debug\lib 的Qt5Xlsx.lib,Qt5Xlsxd.lib,Qt5Xlsx.prl,Qt5Xlsxd.prl到C:\Qt\Qt5.12.11\5.12.11\msvc201564\lib。
4、拷貝 D:\xlsxtool\QtXlsxWriter-master\build-qtxlsx-DesktopQt51211MSVC201564bit-Debug\mkspecs\modules中的qtlibxlsx.pri文件到C:\Qt\Qt5.12.11\5.12.11\msvc201564\mkspecs\modules中。
5、拷貝D:\xlsxtool\QtXlsxWriter-master\build-qtxlsx-DesktopQt51211MSVC201564bit-Debug\lib 的Qt5Xlsx.dll,Qt5Xlsxd.dll到C:\Qt\Qt5.12.11\5.12.11\msvc201564\bin中
1.4 打開vs配置項目屬性
如上配置完成后就能調用#include 了。
二、execl的導入導出
//導入動作槽函數
void SMachine::on_importAct_slot()
{QString filePath = QFileDialog::getOpenFileName(this, tr("打開文件"), m_programPath, "*.xlsx *.xls");if (!filePath.isEmpty()) {openProgramFile(filePath); //調用實際執行導入操作的函數}
}//導出動作作槽函數
void SMachine::on_exportAct_slot()
{if (m_tableWidget == nullptr) return;// 獲取表格數據QList<QStringList> tableData;for (int row = 0; row < m_tableWidget->rowCount(); row++) {QStringList rowData;for (int column = 0; column < m_tableWidget->columnCount(); column++) {QTableWidgetItem* item = m_tableWidget->item(row, column);if (item != NULL) {rowData.append(item->text());}else {rowData.append("");}}tableData.append(rowData);}// 創建Excel文件QXlsx::Document xlsx;//1、遍歷表頭int columnCount = m_tableWidget->columnCount();for (int col = 0; col < columnCount; ++col){QTableWidgetItem* headerItem = m_tableWidget->horizontalHeaderItem(col);if (headerItem){QString text = headerItem->text();xlsx.write(1, col + 1, headerItem->text());}elsexlsx.write(1, col + 1, "");}//2、遍歷內容for (int row = 0; row < tableData.size(); row++){for (int column = 0; column < tableData[row].size(); column++)xlsx.write(row + 2, column + 1, tableData[row][column]);}//3、另存為QString filePath = QFileDialog::getSaveFileName(this, tr("另存為"), m_programPath, "*.xlsx *.xls");if (filePath.isEmpty()) return;xlsx.saveAs(filePath);//4、順便打開已導出(即已另存為)的文件openProgramFile(filePath);
}//根據文件名執行導入excel文件操作的函數
void SMachine::openProgramFile(QString file)
{if (file.isEmpty()) return;QFileInfo fileInfo(file);m_programName = fileInfo.fileName(); //更新文件名if (m_tableWidget != nullptr){ui.tableLayout->removeWidget(m_tableWidget);m_tableWidget->clearContents();m_tableWidget->clear();}//初始化表if (m_tableWidget == nullptr){m_tableWidget = new QTableWidget(this);//m_tableWidget->verticalHeader()->setHidden(true); //隱藏垂直表頭}//設置表頭QTableWidgetItem* headerItem;QStringList headerText;headerText << tr("序號") << tr("X軸") << tr("Y軸") << tr("角度") << tr("站位") << tr("腳位") << tr("元件名稱") << tr("元件類型") << tr("腳寬");m_tableWidget->setColumnCount(headerText.count());for (int i = 0; i < m_tableWidget->columnCount(); i++) {headerItem = new QTableWidgetItem(headerText.at(i));QFont font = headerItem->font();font.setPointSize(9); //設置字體字號headerItem->setTextColor(Qt::blue); //設置顏色headerItem->setFont(font);m_tableWidget->setHorizontalHeaderItem(i, headerItem);}m_tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); //設置列寬自適應//打開文件Document xlsx(file);QXlsx::Workbook* workBook = xlsx.workbook();QXlsx::Worksheet* workSheet = static_cast<QXlsx::Worksheet*>(workBook->sheet(0));//第一個標簽頁QString value;int rows = workSheet->dimension().rowCount();int cols = workSheet->dimension().columnCount();for (int i = 2; i <= rows; i++){int row = m_tableWidget->rowCount();m_tableWidget->insertRow(row);for (int j = 1; j <= cols; j++){QXlsx::Cell* cell = workSheet->cellAt(i, j);if (cell != nullptr){value = cell->value().toString();QTableWidgetItem* item = new QTableWidgetItem(value);m_tableWidget->setItem(i - 2, j - 1, item);}}}ui.tableLayout->addWidget(m_tableWidget);ui.programLE->setText(m_programName);
}
三、調用本地系統默認程序打開/修改execl文件
void SMachine::on_modifyAct_slot()
{QString filePath = QFileDialog::getOpenFileName(this, "選擇 Excel 文件", m_programPath, "Excel 文件 (*.xlsx *.xls)");if (filePath.isEmpty()) {QMessageBox::warning(this, "警告", "未選擇文件!");return;}//利用系統默認程序打開文件bool success = QDesktopServices::openUrl(QUrl::fromLocalFile(filePath));if (!success) {QMessageBox::critical(this, "錯誤", "無法打開 Excel 文件!");}
}