当前位置: 首页 > news >正文

VS+Qt配置QtXlsx库实现execl文件导入导出(全教程)

一、配置QtXlsx

1.1 下载解压QtXlsxWriter(在github下载即可)

网址:https://github.com/dbzhang800/QtXlsxWriter

1.2 使用qt运行

  1. 点击qtxlsx.pro运行QtXlsxWriter

  2. 选择DesktopQt51211MSVC201564bit编译器(选择自己本地电脑qt安装的编译器即可)

  3. 编译运行(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){m_tableWidget->clearContents();m_tableWidget->clear();}//初始化表if (m_tableWidget == nullptr){m_tableWidget = new QTableWidget(this);//m_tableWidget->verticalHeader()->setHidden(true);   //隐藏垂直表头ui.tableLayout->addWidget(m_tableWidget);m_tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);m_tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);}//设置表头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 文件!");}
}


http://www.mrgr.cn/news/96923.html

相关文章:

  • 论文阅读9——更严格的汽车排放标准对气候、健康、农业和经济的影响
  • 酶动力学预测工具CataPro安装教程
  • LeetCode Hot100 刷题笔记(4)—— 二叉树、图论
  • 详解相机的内参和外参,以及内外参的标定方法
  • 论文阅读10——解开碳排放与碳足迹之间的关系:文献回顾和可持续交通框架
  • 国产系统服务器识别不到SATA盘
  • 洛谷题单3-P5720 【深基4.例4】一尺之棰-python-流程图重构
  • SQL语句(一)—— DDL
  • 【大模型系列篇】大模型基建工程:使用 FastAPI 构建 SSE MCP 服务器
  • WPF学习路线
  • 02_使用Docker在服务器上部署Jekins实现项目的自动化部署
  • 亚马逊云科技携手 DeepSeek:开启企业级生成式 AI 新征程
  • react中hooks使用
  • 04-深入解析 Spring 事务管理原理及源码
  • Transformer【学习记录】
  • LeetCode Hot100 刷题笔记(9)—— 二分查找、技巧
  • 【1】搭建k8s集群系列(二进制部署)之系统初始化
  • Python设计模式:代理模式
  • 2024年信息素养大赛 C++小学组初赛 算法创意实践挑战赛 真题答案解析
  • 查询条件与查询数据的ajax拼装