小工具知识网

当前位置: 首页 > 行业知识 > QT 使用第三方库QtXlsx操作Excel表

行业知识

QT 使用第三方库QtXlsx操作Excel表

2026-11-01 05:23:14 来源:互联网转载

1.���介

一直以来,都想学习一下C/C++如何操作excel表,在网上调研了一下,觉得使用C/C++去操作很麻烦,遂转向QT这边;QT有一个自带的类QAxObject,可以使用他去操作,但随着了解的深入,觉得他并不是很好,有很多其他缺陷(例如必须电脑安装了办公软件才可以进行操作等),所以继续调研,终于找到了QT的一个第三方库可以很好的实现:QtXlsx. 

 

Github下载:https://github.com/dbzhang800/QtXlsxWriter

官方文档:http://qtxlsx.debao.me/

在Github下载后,可以直接添加到QtCreator项目中,也可以编译成lib库后再添加到VS中去使用。

2、下载QtXlsx

点击链接进入Github下载

 下载解压后得到如下文件

二、QtXlsx源码嵌入QTCreator中使用

新建一个QTCreator窗体项目

将上图src文件夹拷贝到该项目路径中

之后双击项目中的.pro文件

将如下代码拷贝到.pro文件中

include(src/xlsx/qtxlsx.pri)

Ctrl + s 保存一下,就可以把QtXlsx源码模块加载进来啦!

可以在项目构造函数中添加如下代码进行测试:

#include "xlsxdocument.h"#include "xlsxchartsheet.h"#include "xlsxcellrange.h"#include "xlsxchart.h"#include "xlsxrichstring.h"#include "xlsxworkbook.h" QXlsx::Document xlsx;xlsx.write(1, 2, "Hello Qt!");xlsx.write(2, 2, QString::fromLocal8Bit("中文"));xlsx.saveAs("Text.xlsx");

编译运行后,就可以在项目路径看到程序创建的Text.xlsx文件,打开后就可以看到写入的 "Hello Qt!"和"中文".

三、QtXlsx源码编译成为.lib库使用

1. 下载安装Perl

下载安装:Perl

下载链接:Strawberry Perl for Windows

注意,这个是一定要下载安装的,否则编译lib库会编译失败!!! 

下载后默认安装即可

2. 编译QtXlsx

打开下载的QtXlsx文件夹,双击打开.pro

 根据自己安装的vs版本,选择相应的msvc编译

 打开后直接点击编译

编译完成后,就可以在相应路径找到编译好的lib库

3. 在vs中使用

新建vsQT项目,将include文件夹和Qt5Xlsxd.dll和Qt5Xlsxd.lib拷贝到项目路径中;

将QtXlsxWriter-master文件夹整个拷贝到项目路径中;

拷贝之后项目路径文件,下图方框中的就是我们需要拷贝的文件

右键项目 - 属性 - C/C++ - 常规 - 附加包含目录,把头文件路径添加进来

右键项目 - 属性 - 链接器 - 输入 - 附加依赖项,添加Qt5Xlsxd.lib

或者

​​​​​​​

之后,可以加入头文件

#include "xlsxdocument.h"#include "xlsxchartsheet.h"#include "xlsxcellrange.h"#include "xlsxchart.h"#include "xlsxrichstring.h"#include "xlsxworkbook.h"

在构造函数中加入代码

QXlsx::Document xlsx;xlsx.write(1, 2, "Hello Qt!");xlsx.write(2, 2, QString::fromLocal8Bit("中文"));xlsx.saveAs("Text.xlsx");

编译运行,不出意外的话, 在项目路径会一个名为Text.xlsx的文件,双击打开

 数据也已经写入,测试成功! 

四、QtXlsx

1. 知识点

a. 定义

QXlsx::Document xlsx;QXlsx::Document xlsx("Text.xlsx");

b. 往单元格中写入数据

writexlsx.write(2, 2, "中文");         参数一是行,参数二是列,参数三是数据xlsx.write("C3", "C3");        参数一是对应单元格名字,参数二是数据

c. 设置行高

setRowHeightxlsx.setRowHeight(4, 30);        设置第四行高度为30

d. 设置列宽

setColumnWidthxlsx.setColumnWidth(3, 50);         设置第三列宽度为50

 e. 设置单元格样式

QXlsx::Format format;format.setFontColor(Qt::red);                  // 设置字体颜色为红色format.setFontBold(true);                         // 设置加粗format.setFontSize(30);                            // 设置字体大小format.setFontItalic(true);                          // 设置倾斜format.setFontName("楷体");                     // 设置字体format.setPatternBackgroundColor(QColor(100, 200, 100));         // 设置单元格背景颜色format.setHorizontalAlignment(QXlsx::Format::AlignHCenter);      // 设置水平居中,更多参考enum HorizontalAlignment枚举format.setVerticalAlignment(QXlsx::Format::AlignVCenter);           // 设置垂直居中format.setBorderColor(QColor(50, 50, 50));                                    // 设置边框颜色format.setFontUnderline(QXlsx::Format::FontUnderlineDouble);    // 设置双下划线,更多参考enum FontUnderline枚举format.setFontUnderline(QXlsx::Format::FontUnderlineSingle);      // 设置单下划线format.setFillPattern(QXlsx::Format::PatternLightUp);                     // 填充方式,更多参考enum FillPattern枚举xlsx.write("C4", "红色|加粗|30", format);        作为第三个参数

f. 设置单元格方框

setBorderStyleformat.setBorderStyle(QXlsx::Format::BorderThin);        更多参考enum BorderStyle枚举

g. 合并单元格

mergeCellsxlsx.mergeCells("C4:E6");        参数指定那个单元格区间

h. 取消合并

unmergeCellsxlsx.unmergeCells("C4:E6");        参数指定的单元格区间一定是要已经合并的,否则打开xlsx文件报错

i. 读取单元格中的数据

readQString str1 = xlsx.read(1, 1).toString();        指定行列获取QString str2 = xlsx.read("B2").toString();        指定单元格名字获取

j. 获得单元格对象

cellAtQXlsx::Cell *cell = xlsx.cellAt("C4");                获取到的是指针对象QXlsx::Cell *cell = xlsx.cellAt(1, 1);cell->value();        可以通过value()函数获取单元格中的值

k. 添加工作表

addSheetxlsx.addSheet("sheet_2");        添加这一张名为“sheet_2”的工作表

l. 工作表重命名

renameSheetxlsx.workbook()->renameSheet(1, "sheet_3");        将索引为1(也就是第二张)的工作表命名为“sheet_3”

m. 选择当前工作表

selectSheetxlsx.selectSheet("sheet_3");        选择名为“sheet_3”的工作表为当前xlsx工作表

n. 获得所有工作表的名字

sheetNamesQStringList sheetList = xlsx.sheetNames();        获取返回的是一个字符串链表

o. 获取工作簿对象

workbookQXlsx::Workbook *workBook = xlsx.workbook();

p. 获取当前工作簿的第一张sheet工作表

QXlsx::Worksheet *workSheet = static_cast(workBook->sheet(0));

q. 获取当前sheet表所使用到的行数

int row = workSheet->dimension().rowCount();

r. 获取当前sheet表所使用到的列数

int colum = workSheet->dimension().columnCount();

s. 遍历sheet表中有数据的单元格

for (int i = 0; i cellAt(i, j);    // 读取单元格                                      if (cell) {                                        qDebug() 

上一篇:服务器ping值高怎么解决?

下一篇:掌握英语日常用语必备!收到的正确表达方法揭秘!