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

Qt导出Excel图表

目的

就是利用Qt导出Excel图表,如果直接画Excel 图表,比较麻烦些,代码写得也复杂了;而直接利用Excel模块就简单了,图表在模块当中已经是现成的了,Qt程序只更改数据就可以了,这篇文章就是记录一下利用模块上的图表生成Excel图表的过程。

模块选择上,QtXlsxWriter,这一个模块功能较简单一些,看看网上github库,也知道,已经好久不更新了,而且也没有打开现在Excel的功能;QT自带的那个QAxObject,很难用,用户使用体验极差。
综合来说,只能选择QXlsx.

QXlsx的介绍:

QXlsx 是一个非官方的、独立的 Qt 库,用于读写 Excel 文件(.xlsx 格式)。这个库提供了一个方便的方式来创建新的 Excel 文档或编辑现有文档,而不依赖于 COM 或其他外部接口,使其适用于跨平台应用程序。
QXlsx 的主要特性
读取和写入 Excel 文件:
支持从 .xlsx 文件中读取数据,并能够写入新数据或修改现有数据。
支持单元格格式:
可以设置字体、边框、颜色、对齐方式等多种单元格格式。
多种数据类型:
支持字符串、数字、日期和时间等多种类型的数据输入。
公式和函数:
可以在单元格中使用 Excel 公式,例如 SUM、AVERAGE 等。
图表支持:
可以创建基本的图表,如条形图、折线图等。
合并单元格:
支持合并和拆分单元格。
图像和注释:
可以在工作表中插入图像和添加注释。

相关材料

第三方模块:
https://github.com/QtExcel/QXlsx/wiki
基本用法的介绍:
https://github.com/QtExcel/QXlsx/wiki
这一个代码有些陈旧了:
https://github.com/dbzhang800/QtXlsxWriter

情况分析

首先建立Excel文档,作为模板用:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这样Excel模块上的图表,表格的数据都是来源于Sheet2上面的数据,这样代码只需要设置Sheet2上的数据就可以了。

代码调用模块:
项目结构:
在这里插入图片描述

代码情况:

#pragma execution_character_set("utf-8")
#include <QCoreApplication>
#include "xlsxdocument.h"
#include <QDebug>
using namespace QXlsx;
/*** @brief writeToExcelSheet2* @param excelFilePath Excel的路径* @param sheetNumber  操作数据所在的表* @param beginRow     数据所开始的行* @param beginColumn  数据所开始的例* @param data         二维数据,行列数据*/
void writeToExcelSheet2(const QString &excelFilePath, int sheetNumber,int beginRow, int beginColumn, QVector<QVector<double>> &data) {qDebug("enter function writeToExcelSheet2");//加载模板QXlsx::Document xlsx(excelFilePath);if (!xlsx.load()){qDebug() << "load failed!!!";return;}qDebug() << "excelFilePath=" << excelFilePath << ", data=" << data << ",count=" << xlsx.sheetNames().count();qDebug() << "xlsx.sheetNames()=" << xlsx.sheetNames();QVector<double> rowVector;//选择所指定的工作表if(xlsx.selectSheet(sheetNumber)){for(int i = 0; i < data.size(); i++){rowVector = data[i];for(int j = 0; j < rowVector.size(); j++){// 写入数据Format format = xlsx.cellAt(beginRow+j, beginColumn+i)->format();xlsx.write(beginRow+j, beginColumn+i, QVariant(rowVector[j]).toDouble(), format);}}// 保存文件xlsx.save();}qDebug("exit function writeToExcelSheet2");
}
int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QString currentPath = QCoreApplication::applicationDirPath();QString excelFilePath = currentPath+"\\scoreRanking.xlsx";int sheetNumber = 1; // 假设我们要操作的是第二个工作表//int row = 2; // 假设我们要写入的行号是1//int column = 1; // 假设我们要写入的列号是1//写Sheet2的1列的成绩数据QVector<QVector<double>> data1 = {{40, 62, 63, 65, 67, 68, 69, 71, 72, 78,81, 82, 81, 82, 83, 84, 85, 86, 87, 88,91, 92, 93, 94, 95, 96, 97, 98, 100, 120}};writeToExcelSheet2(excelFilePath, sheetNumber,2, 1, data1);//写Sheet2的2列的班级名次数据data1 = {{40, 39, 38, 37, 36, 35, 34, 33, 32, 31,30, 29, 28, 27, 26, 25, 24, 23, 22, 21,20, 19, 18, 17, 16, 15, 14, 13, 12, 10}};writeToExcelSheet2(excelFilePath, sheetNumber,2, 2, data1);//写Sheet2的3列的学校名次数据data1 = {{240, 239, 238, 237, 236, 235, 234, 233, 232, 231,230, 229, 228, 227, 226, 225, 224, 223, 222, 221,220, 219, 218, 217, 216, 215, 214, 213, 212, 220}};writeToExcelSheet2(excelFilePath, sheetNumber,2, 3, data1);return a.exec();
}

更改上面的数据后,执行代码,Excel的数据就会跟着变,由于效果与上面一样,只是数据变了,就不再贴图了。

注意事项

Excel 特性的支持程度:尽管 QXlsx 支持许多基本的 Excel 功能,但它可能不支持最新的或高级的 Excel 特性,如复杂的数据透视表或宏。
性能考虑:处理非常大的 Excel 文件时,性能可能会成问题。这需要在实际应用中进行测试。
QXlsx 提供了一个方便的方式来处理 Excel 文件,尤其适合那些不需要依赖 Microsoft Office 自动化、需要跨平台支持的应用程序。

总结

导出图表本身是一个挺麻烦的事,通过Excel的模板,就把麻烦事变成简单事了,QT程序只需要更新数据就可以了,这样处理简单,不用为控制Excel格式而费心了,而且显示的效果好,最后以图说明:
在这里插入图片描述
例子下载地址:https://download.csdn.net/download/maokexu123/90052338

http://www.lryc.cn/news/493778.html

相关文章:

  • 分布式协同 - 分布式系统的特性与互斥问题
  • windows安装itop
  • LAMP环境的部署
  • Go语言压缩文件处理
  • rocylinux9.4安装prometheus监控
  • 屏幕分辨率|尺寸|颜色深度指纹
  • docker-elasticsearch-kibana-logstash
  • C#设计模式——抽象工厂模式(重点)
  • 全新AI模型家族登场:完全可复现的开源语言模型OLMo 2
  • 用Matlab和SIMULINK实现DPCM仿真和双边带调幅系统仿真
  • RabbitMQ的交换机总结
  • Android so库的编译
  • 2024年底-Arch linux或转为0BSD许可证!
  • 深入解析音视频流媒体SIP协议交互过程
  • linux安装mysql8.0.40
  • Java基础之控制语句:开启编程逻辑之门
  • 如何还原 HTTP 请求日志中的 URL 编码参数?详解 %40 到 @
  • usb_cam ros包话题说明,image transport包使用
  • 微前端-MicroApp
  • Unity UGUI 垂直循环复用滚动
  • Spring MVC 深度剖析:优势与劣势全面解读
  • 力扣hot100-->前缀和/前缀书/LRU缓存
  • Three.js CSS2D/CSS3D渲染器
  • mongodb文档字符串批量替换
  • 前端安全和解决方案
  • Tlias智能辅助学习系统-部门管理
  • React第十节组件之间传值之context
  • flink中barrier不对齐的原因和影响
  • 软银集团孙正义再度加码OpenAI,近屿智能专注AI人才培养
  • 麒麟系统x86安装达梦数据库