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){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 文件!");}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/76430.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Golang的文件处理优化策略

Golang的文件处理优化策略 一、Golang的文件处理优化策略概述 是一门效率高、易于编程的编程语言&#xff0c;它的文件处理能力也非常强大。 在实际开发中&#xff0c;需要注意一些优化策略&#xff0c;以提高文件处理的效率和性能。 本文将介绍Golang中的文件处理优化策略&…

自学-C语言-基础-数组、函数、指针、结构体和共同体、文件

这里写自定义目录标题 代码环境&#xff1a;&#xff1f;问题思考&#xff1a;一、数组二、函数三、指针四、结构体和共同体五、文件问题答案&#xff1a; 代码环境&#xff1a; Dev C &#xff1f;问题思考&#xff1a; 把上门的字母与下面相同的字母相连&#xff0c;线不能…

VMware+Ubuntu+VScode+ROS一站式教学+常见问题解决

目录 一.VMware的安装 二.Ubuntu下载 1.前言 2.Ubuntu版本选择 三.VMware中Ubuntu的安装 四.Ubuntu系统基本设置 1.中文更改 2.中文输入法更改 3. 辅助工具 vmware tools 五.VScode的安装ros基本插件 1.安装 2.ros辅助插件下载 六.ROS安装 1.安装ros 2.配置ROS…

PostgreSQL pg_repack 重新组织表并释放表空间

pg_repack pg_repack是 PostgreSQL 的一个扩展&#xff0c;它允许您从表和索引中删除膨胀&#xff0c;并可选择恢复聚集索引的物理顺序。与CLUSTER和VACUUM FULL不同&#xff0c;它可以在线工作&#xff0c;在处理过程中无需对已处理的表保持独占锁定。pg_repack 启动效率高&a…

5G_WiFi_CE_射频输出功率、发射功率控制(TPC)和功率密度测试

目录 一、规范要求 1、法规目录&#xff1a; &#xff08;1&#xff09;RF Output Power (2)Transmit Power Control (TPC) &#xff08;3&#xff09;Power Density 2、限值&#xff1a; 二、EIRP测试方法 &#xff08;1&#xff09;测试条件 &#xff08;2&#xff…

扫描线离散化线段树解决矩形面积并-洛谷P5490

https://www.luogu.com.cn/problem/P5490 题目描述 求 n n n 个四边平行于坐标轴的矩形的面积并。 输入格式 第一行一个正整数 n n n。 接下来 n n n 行每行四个非负整数 x 1 , y 1 , x 2 , y 2 x_1, y_1, x_2, y_2 x1​,y1​,x2​,y2​&#xff0c;表示一个矩形的四个…

Java项目之基于ssm的简易版营业厅宽带系统(源码+文档)

项目简介 简易版营业厅宽带系统实现了以下功能&#xff1a; 此营业厅宽带系统利用当下成熟完善的SSM框架&#xff0c;使用跨平台的可开发大型商业网站的Java语言&#xff0c;以及最受欢迎的RDBMS应用软件之一的Mysql数据库进行程序开发。实现了营业厅宽带系统基础数据的管理&…

从入门到入土,SQLServer 2022慢查询问题总结

列为,由于公司原因,作者接触了一个SQLServer 2022作为数据存储到项目,可能是上一任的哥们儿离开的时候带有情绪,所以现在项目的主要问题就是,所有功能都实现了,但是就是慢,列表页3s打底,客户很生气,经过几周摸爬滚打,作以下总结,作为自己的成长记录。 一、索引问题…

PDF处理控件Aspose.PDF教程:在Python、Java 和 C# 中旋转 PDF 文档

您是否希望快速轻松地在线旋转PDF文档&#xff1f;无论您需要修复文档的方向还是只想重新排列页面&#xff0c;本指南都能满足您的需求。有简单的方法可以解决此问题 - 无论您喜欢在线工具还是编程解决方案。 在本指南中&#xff0c;我们将向您展示如何免费在线旋转 PDF&#…

编译原理:first集和follow

一、First 集&#xff08;首符号集&#xff09; 定义&#xff1a; 对于符号&#xff08;非终结符或终结符&#xff09;或符号串&#xff0c;First 集是该符号串能够推导出的所有可能开头的终结符的集合。若符号串可以推导出空串&#xff08;ε&#xff09;&#xff0c;则 ε 也…

python实现简单fast-cgi服务,对接到nginx

python代码 import socket import struct import threading# FastCGI 头格式&#xff08;8 字节&#xff09; FCGI_HEADER_FORMAT "!BBHHBx" FCGI_VERSION 1 FCGI_TYPE_BEGIN_REQUEST 1 FCGI_TYPE_PARAMS 4 FCGI_TYPE_STDIN 5 FCGI_TYPE_STDOUT 6 FCGI_TYPE_E…

vue开始时间小于等于结束时间,且开始时间小于等于系统时间,时间格式:年月日时分

// 日期配置 export const DATA_CONFIGS [{itemKey: "startDate",startDateKey: "startDate",endDateKey: "endDate",isStart: true,},{itemKey: "endDate",startDateKey: "startDate",endDateKey: "endDate",is…

PyCharm 下载与安装教程:从零开始搭建你的 Python 开发环境

PyCharm 是一款专为 Python 开发设计的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它提供了强大的代码编辑、调试、版本控制等功能&#xff0c;是 Python 开发者的必备工具之一。如果你是初学者&#xff0c;或者正在寻找一款高效的开发工具&#xff0c;这篇文章将帮助…

Qt线程等待条件QWaitCondition

Qt 线程等待条件 概念 Qt提供了QWaitCondition类实现“等待条件”式的线程控制方法&#xff0c;它让线程阻塞在等待条件的地方&#xff0c;直到条件满足后才继续执行下去。也就是说&#xff0c;QWaitCondition可以使一个线程在满足一定条件时通知其他多个线程&#xff0c;使它…

RAG 和 RAGFlow 学习笔记

一、RAG&#xff08;检索增强生成&#xff09; 1. RAG 的定义与核心思想 RAG&#xff08;Retrieval-Augmented Generation&#xff0c;检索增强生成&#xff09; 是一种结合 信息检索&#xff08;Retrieval&#xff09; 和 文本生成&#xff08;Generation&#xff09; 的技术…

Windows连接服务器Ubuntu_MobaXterm

通过 SSH 远程连接&#xff08;命令行方式&#xff09; &#x1f527; 所需工具&#xff1a; Windows&#xff1a;MobaXterm&#xff08;强烈推荐&#xff09;或 PuTTY Ubuntu&#xff1a;已开启 SSH 服务 Ubuntu 开启 SSH 服务&#xff08;仅需一次&#xff09; 在 Ubuntu …

Rust 中的高效视频处理:利用硬件加速应对高分辨率视频

引言 在视频处理领域&#xff0c;随着4K、8K甚至更高分辨率内容的普及&#xff0c;传统的CPU计算方式逐渐显得力不从心。无论是视频剪辑、直播流处理还是格式转换&#xff0c;高负载场景下CPU占用过高的问题常常让开发者头疼。硬件加速技术通过利用GPU等专用硬件分担编解码任务…

大模型提示工程中,提示、补全、指令、上下文和样本这几个概念的区别是什么?

提示 (Prompt) 定义&#xff1a;输入给大模型的完整文本刺激&#xff0c;是与模型交互的主要方式。 特点&#xff1a; 是最广义的概念&#xff0c;包含其他几个元素整体输入的总和&#xff0c;包括指令、上下文和样本等内容决定模型如何理解和处理请求 示例&#xff1a; 分…

AI的未来演进

企业数字IP实战&#xff1a;创始人分身如何实现品宣获客双赢&#xff1f; ——从量子化建模到联邦学习的全链路技术拆解 一、行业痛点&#xff1a;品牌信任与获客效率的双重困局 2025年数据显示&#xff0c;73%的企业因传统营销模式效率低下错失市场机遇&#xff08;家居品牌…

软件定义无线电39

13.8 RFSoC上PYNQ的SDR设计流程 本节中详细介绍的设计过程可以分为六个独立的步骤&#xff0c;如图13.16所示&#xff0c;并在接下来的几页中进行讨论。 13.8.1 初始设计过程 。在这里&#xff0c;系统设计人员必须考虑许多因素&#xff0c;例如RFDC接收和/或发送的频率范围…