Qt 使用QXlsx将QTableView数据导出到Excel表格

这是我记录Qt学习过程的第7篇心得文章,上次写到使用QAxObject将QTableView数据导出到Excel表格,使用过程中发现,执行效率不高,而且当电脑同时安装Office和WPS时,还经常出错,于是就研究了QXlsx,发现利用QXlsx处理Excel真的太方便了,啥也不说,上代码。

实现代码:
//将QTableView数据写入EXcel,使用QXlsx
bool Skysonya::writeTableviewToExcelByQXlsx(const QString &fileName, QString tableName, QTableView *tableView,QString strTitle)
{QAbstractTableModel *model = qobject_cast<QAbstractTableModel *>(tableView->model());int rowCount = model->rowCount();int colCount = model->columnCount();QXlsx::Document xlsx;xlsx.addSheet(tableName);int colW[200] = {};// 写入表头并设置字体QXlsx::Format headerFormat;headerFormat.setFontName("黑体");  //设置字体headerFormat.setFontSize(12);      //设置字号headerFormat.setHorizontalAlignment(QXlsx::Format::AlignHCenter);  //设置单元格居中headerFormat.setBorderStyle(QXlsx::Format::BorderThin);            //设置单元格边线// 写入表头for (int col = 0; col < colCount + 1; ++col){QString cell;if (col == 0)cell = "序号";  //增加序号列elsecell = model->headerData(col - 1, Qt::Horizontal).toString();xlsx.write(1, col + 1, cell, headerFormat);// 设置列宽int columnWidth = cell.toLocal8Bit().length() + 2;  //计算字符串长度,中文字符占位2if (columnWidth > colW[col]){colW[col] = columnWidth;xlsx.setColumnWidth(col + 1, columnWidth);  // 设置每列宽度为字符数+2}}// qDebug() << "1:" << ArrayToString(colW, colCount) << Qt::endl;qDebug() << strTitle + ":数据表头写入成功!" << Qt::endl;QXlsx::Format itemFormat;itemFormat.setHorizontalAlignment(QXlsx::Format::AlignHCenter);itemFormat.setBorderStyle(QXlsx::Format::BorderThin);// 写入数据for (int row = 0; row < rowCount; ++row){for (int col = 0; col < colCount + 1; ++col){QString cell;if (col == 0)cell = QString::number(row + 1);elsecell = model->data(model->index(row, col - 1)).toString();xlsx.write(row + 2, col + 1, cell, itemFormat);// 设置列宽int columnWidth = cell.toLocal8Bit().length() + 2;  //计算字符串长度,中文字符占位2if (columnWidth > colW[col]){colW[col] = columnWidth;xlsx.setColumnWidth(col + 1, columnWidth);  // 设置每列宽度为字符数+2}}// qDebug() << QString::number(row + 2) + ":" << ArrayToString(colW, colCount) << Qt::endl;}qDebug() << strTitle + ":数据表数据写入成功!" << Qt::endl;// 保存文件if (!xlsx.saveAs(fileName)){messageBox("warning", strTitle, "保存Excel文件失败!");return false;}qDebug() << strTitle + ":保存Excel文件成功!" << Qt::endl;xlsx.deleteLater();return true;
}

messageBox()函数参考拙文QT实现QMessageBox中文按钮

QXlsx下载与配置,查阅QXlsx Qt操作excel,作者周不易,在此也表示感谢!

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

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

相关文章

智慧用电监控装置:引领0.4kV安全用电新时代

在智能科技日新月异的今天&#xff0c;电力安全与管理正迎来一场前所未有的革新。为0.4kV以下TT、TN系统打造的智慧用电在线监控装置不仅重新定义了电力监控的边界&#xff0c;更为建筑安全用电筑起了一道坚不可摧的防线。 装置集成了单、三相交流电精确测量、四象限电能计量、…

【GL09】(算法)卡尔曼滤波

一、简介 卡尔曼滤波&#xff08;Kalman Filter&#xff09;是一种有效的递归滤波器&#xff08;自回归滤波器&#xff09;&#xff0c;它能够从一系列的包含统计噪声的测量中估计动态系统的状态。卡尔曼滤波广泛应用于信号处理、控制理论、自动驾驶、金融等领域。 基本公式&am…

IIC学习总结

一、基本概念 IIC&#xff08;Inter-Integrated Circuit&#xff09;其实是IICBus简称&#xff0c;所以中文应该叫集成电路总线&#xff0c;它是一种串行通信总线&#xff0c;使用多主从架构。 二、模块结构 I2C串行总线一般有两根信号线&#xff0c;一根是双向的数据线SDA&…

go 聊天系统项目-1

1、登录界面 说明&#xff1a;这一节的内容采用 go mod 管理【GO111MODULE‘’】的模块&#xff0c;从第二节开始使用【GO111MODULE‘off’】GOPATH 管理模块。具体参见 go 包相关知识 1.1登录界面代码目录结构 代码所在目录/Users/zld/Go-project/day8/chatroom/ 1.2登录…

qt QCheckBox详解

QCheckBox 是 Qt 框架中的一个控件&#xff0c;用于创建复选框&#xff0c;允许用户进行选择和取消选择。它通常用于表单、设置界面和任何需要用户选择的场景。 QCheckBox继承自QAbstractButton类&#xff0c;因此继承了按钮的特性。它表示一个复选框&#xff0c;用户可以通过…

使用Postman发送POST请求的指南

作为一名软件测试工程师&#xff0c;掌握如何使用Postman发送POST请求是非常重要的技能。POST请求通常用于向服务器发送数据&#xff0c;以创建或更新资源。本文将详细介绍如何在Postman中发送POST请求&#xff0c;帮助你高效地进行接口测试。 什么是POST请求&#xff1f; PO…

LINUX Shell命令中$0、$1-9、$#、$?、$*、$@、$!、$、$-、$IFS含义及举例

在Linux Shell脚本中&#xff0c;预定义了一些特殊参数&#xff0c;它们分别代表不同的含义和返回值&#xff0c;下面试着借用ChatGTP辅助写作进行总结并举例&#xff1a; 1. $0&#xff1a;脚本名 $0返回当前值行的shell脚本的名称。 2.$1-$9&#xff1a;命令行参数1到9 $…

2024年meme币走势分析:最后两个月的市场趋势与机会 #交易所#dapp#KOL社区合作

2024年即将步入尾声&#xff0c;meme币市场经历了显著的波动。对于加密市场来说&#xff0c;年底的走势尤为关键&#xff0c;尤其是meme币这种受市场情绪影响较大的加密资产。本文将从市场环境、宏观经济因素、投资者情绪、技术分析等方面分析meme币在2024年最后两个月的潜在走…

Rust:文档注释 //! 和 ///

在 Rust 编程语言中&#xff0c;//! 是一种特殊的文档注释&#xff08;documentation comment&#xff09;。它用于为整个模块、结构体、枚举、函数或其他项提供文档说明。与单行注释 // 和多行注释 /* ... */ 不同&#xff0c;//! 和 ///&#xff08;用于紧跟在项之前的文档注…

如何使用 Vue CLI 创建 Vue 项目?

写在前面 Vue.js 是一个流行的 JavaScript 框架&#xff0c;用于构建用户界面和单页应用程序。Vue CLI 是一个官方的命令行工具&#xff0c;旨在帮助开发者快速、轻松地创建和管理 Vue 项目。在本文中&#xff0c;我们将详细介绍如何使用 Vue CLI 创建一个新的 Vue 项目。 安…

python读取视频并转换成gif图片

1. 安装三方库 moviepy 将视频转换成gif&#xff0c;需要使用 moviepy库 确保已经安装了moviepy库 pip install moviepy2. 代码实现&#xff1a; from moviepy.editor import VideoFileClipmyclip VideoFileClip("video.mp4") myclip2 myclip.subclip(0, 10).re…

opencv - py_imgproc - py_filtering filtering 过滤-卷积平滑

文章目录 平滑图像目标2D 卷积&#xff08;图像过滤&#xff09;图像模糊&#xff08;图像平滑&#xff09;1. 平均2. 高斯模糊3. 中值模糊4. 双边滤波 其他资源 平滑图像 目标 学习&#xff1a; 使用各种低通滤波器模糊图像将定制滤波器应用于图像&#xff08;2D 卷积&…

大数据新视界 -- 大数据大厂之数据质量管理全景洞察:从荆棘挑战到辉煌策略与前沿曙光

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

如何保护网站安全

1. 使用 Web 应用防火墙&#xff08;WAF&#xff09; 功能&#xff1a;WAF 可以实时检测和阻止 SQL 注入、跨站脚本&#xff08;XSS&#xff09;、文件包含等常见攻击。它通过分析 HTTP 流量来过滤恶意请求。 推荐&#xff1a;可以使用像 雷池社区版这样的 WAF&#xff0c;它提…

大模型中的token是什么;常见大语言模型的 token 情况

目录 大模型中的token是什么 常见大语言模型的 token 情况 大模型中的token是什么 定义 在大模型中,token 是文本处理的基本单位。它可以是一个字、一个词,或者是其他被模型定义的语言单元。简单来说,模型在理解和生成文本时,不是以完整的句子或段落为单位进行一次性处理…

redis安装使用

1. 下载地址 下载最新稳定版本的 redis-windows 7.x 版本(本实例以 7.2.3 为例) # 下载地址 https://download.csdn.net/download/qq827245563/89923840 2. 解压文件 3. 下载可视化工具 # 下载地址 https://download.csdn.net/download/qq827245563/89940627 4. 启动运行 …

ELK + Spring Boot:日志分析入门与实践(一)

目录 一、安装ELK 1.1 版本选择 1.2 linux环境安装 1.3 ES配置启动 1.4 Kibana配置启动 1.5 Logstash配置启动 二、项目调整 2.1 pom依赖调整 2.2 yml配置文件调整 2.3 logback-spring配置 三、日志查询分析 3.1 创建索引模式 3.2 查询日志数据 一、安装ELK 1.1 …

SQL中`ORDER BY`、`SORT BY`、`DISTRIBUTE BY`、`GROUP BY`、`CLUSTER BY`的区别详解

SQL中ORDER BY、SORT BY、DISTRIBUTE BY、GROUP BY、CLUSTER BY的区别详解 在MySQL以及大数据处理工具如Hive中&#xff0c;ORDER BY、SORT BY、DISTRIBUTE BY、GROUP BY、CLUSTER BY这些关键字都与数据的排序和分组操作密切相关&#xff0c;但它们各自有着不同的功能和适用场…

elasticsearch 8.x 插件安装(六)之Hanlp插件

elasticsearch 8.x 插件安装&#xff08;六&#xff09;之Hanlp插件 elasticsearch插件安装合集 elasticsearch插件安装&#xff08;一&#xff09;之ik分词器安装&#xff08;含MySQL更新&#xff09; elasticsearch 8.x插件&#xff08;二&#xff09;之同义词安装如何解决…

测试Bug提交报告模板

撰写测试Bug提交说明时&#xff0c;清晰、详细和准确是至关重要的。这有助于开发团队快速理解问题、重现Bug并修复它。以下是一个测试Bug提交说明的模板&#xff0c;可以根据实际情况进行调整&#xff1a; 测试Bug提交说明 1. Bug基本信息 Bug编号&#xff1a;[系统自动生成…