Qt使用Qtxlsx第三方库

使用说明

  1. 下载 qtxlsx

  2. 加载 qtxlsx
    编辑 pro 文件

## 添加qtxlsx模块
include(3RDMOD/qtxlsx/qtxlsx.pri);
## 还有另外一种编译QtXlsx模块的方式,操作太麻烦。不如直接加载到项目一起编译。
## 添加头文件
#include "xlsxdocument.h"
int main()
{
{
//Create a new .xlsx file.
QXlsx::Document xlsx;
## 使用单元格坐标, 起始坐标为 1,1 不是0
xlsx.wirte(1,10, "xxx");
## 使用单元格坐标名
xlsx.write("A1", "Hello Qt!");
xlsx.write("A2", 12345);
xlsx.write("A3", "=44+33");
xlsx.write("A4", true);
xlsx.write("A5", "http://qt-project.org");
xlsx.write("A6", QDate(2013, 12, 27));
xlsx.write("A7", QTime(6, 30));
xlsx.saveAs("Book1.xlsx");
}
QXlsx::Document xlsx("Book1.xlsx");
qDebug()<<xlsx.read("A1");
qDebug()<<xlsx.read("A2");
qDebug()<<xlsx.read("A3");
qDebug()<<xlsx.read("A4");
qDebug()<<xlsx.read("A5");
qDebug()<<xlsx.read("A6");
qDebug()<<xlsx.read("A7");
for (int row=1; row<10; ++row) {
if (QXlsx::Cell *cell=xlsx.cellAt(row, 1))
qDebug()<<cell->value();
}
return 0;
}
# 全进阶操作
https://www.cnblogs.com/whwywzhj/p/9176662.html
1. 选择指定工作表(没有就创建)
if(!xlsx.selectSheet("ziv")){/*在当前打开的xlsx文件中,找一个名字为ziv的sheet*/
xlsx.addSheet("ziv");//找不到的话就添加一个名为ziv的sheet
}
2. 指定格式
QXlsx::Format format1;/*设置该单元的样式*/
format1.setFontColor(QColor(Qt::red));/*文字为红色*/
format1.setPatternBackgroundColor(QColor(152,251,152));/*北京颜色*/
format1.setFontSize(15);/*设置字体大小*/
format1.setHorizontalAlignment(QXlsx::Format::AlignHCenter);/*横向居中*/
format1.setBorderStyle(QXlsx::Format::BorderDashDotDot);/*边框样式*/
xlsx.write("A1", "Hello Qt!", format1);/*写入文字,应该刚才设置的样式*/
xlsx.write(2, 1, 12345, format1);/*写入文字,应该刚才设置的样式*/
3. 插入图表
if(!xlsx.selectSheet("ziv")){/*在当前打开的xlsx文件中,找一个名字为ziv的sheet*/
xlsx.addSheet("ziv");//找不到的话就添加一个名为ziv的sheet
}
for (int i=10; i<20; ++i) {/*写入一串数字*/
xlsx.write(i, 1, i*i*i); //A10:A19
xlsx.write(i, 2, i*i); //B10:B19
xlsx.write(i, 3, i*i-1); //C10:C19
}
QXlsx::Chart *pieChart = xlsx.insertChart(3, 5, QSize(300, 300));/*在3行5列的位置插入一个图标*/
pieChart->setChartType(QXlsx::Chart::CT_Pie);/*插入一个饼形图*/
pieChart->addSeries(QXlsx::CellRange("A10:A19"));/*饼形图添加数据*/
pieChart->addSeries(QXlsx::CellRange("B10:B19"));
pieChart->addSeries(QXlsx::CellRange("C10:C19"));
QXlsx::Chart *barChart = xlsx.insertChart(3, 13, QSize(300, 300));/*在3行13列的位置插入一个图标*/
barChart->setChartType(QXlsx::Chart::CT_Bar);/*条形图*/
barChart->addSeries(QXlsx::CellRange("A10:C19"));/*给条形图加入数据*/
xlsx.saveAs("book1.xlsx");/*保存*/
QXlsx::Document xlsx2("Book1.xlsx");/*复制book1到book2*/
xlsx2.saveAs("Book2.xlsx");

image

示例2

void testfunc()
{
QXlsx::Document xlsx;
QXlsx::Format formatTitle;
formatTitle.setFontBold(true); /// 粗体
formatTitle.setFontColor(QColor(Qt::black));
formatTitle.setFontSize(20); /// 字体大小 20
formatTitle.setBorderStyle(QXlsx::Format::BorderThin); /// 边框样式
formatTitle.setPatternBackgroundColor(Qt::lightGray); /// 单元格背景色
formatTitle.setFillPattern(QXlsx::Format::PatternSolid); /// 填充样式
formatTitle.setHorizontalAlignment(QXlsx::Format::AlignHCenter); /// 文本水平居中
xlsx.mergeCells(QXlsx::CellRange(1,1, 1, 15), formatTitle); /// 合并单元格 第一行1-5格合并成一格
xlsx.write(1, 1, "table title ... 测试"); /// 给合并后的单元格写数据, 注意参数 (1,1,"title")
// 写表头 表头在第二行 1-15
QXlsx::Format format1;
format1.setFontBold(false);
format1.setFontSize(14);
format1.setFontColor(QColor(Qt::black));
format1.setBorderStyle(QXlsx::Format::BorderThin);
format1.setPatternBackgroundColor(Qt::darkGray); /// 单元格背景色
xlsx.write(2, 1, "title 1", format1);
xlsx.write(2, 2, "title 2", format1);
xlsx.write(2, 3, "title 3", format1);
xlsx.write(2, 4, "title 4", format1);
xlsx.write(2, 5, "title 5", format1);
xlsx.write(2, 6, "title 6", format1);
xlsx.write(2, 7, "title 7", format1);
xlsx.write(2, 8, "title 8", format1);
xlsx.write(2, 9, "表头 9", format1);
xlsx.write(2, 10, "表头 10", format1);
xlsx.write(2, 11, "表头 11", format1);
xlsx.write(2, 12, "表头 12", format1);
xlsx.write(2, 13, "表头 13", format1);
xlsx.write(2, 14, "表头 14", format1);
xlsx.write(2, 15, "表头 15", format1);
QXlsx::Format format2;
format2.setFontBold(false);
format2.setFontColor(QColor(Qt::black));
format2.setBorderStyle(QXlsx::Format::BorderThin);
/// 写表格
/// 可以先按行写, 也可以按列写
/// 这里按列写数据
for (int col = 1; col <= 15; col++) // 1-15 列
{
for (int row = 3; row <= 10; row++) // 3-10行
{
xlsx.write(row, col, row + col, format2);
}
}
xlsx.saveAs("test8.xlsx");
}
int main()
{
std::thread(testfunc).join();
return 0;
}
posted @   看不见的R  阅读(1323)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
历史上的今天:
2020-01-20 KDE桌面美化
2020-01-20 archlinux网易云音乐字体小
点击右上角即可分享
微信分享提示