Qt 使用QtXlsx库处理Excel文件
- 一、QtXlsx库介绍
- 二、编译QtXlsx库
- 三、在Qt项目中使用QtXlsx
-
- 1、在.pro文件中添加配置
- 2、基本使用示例
-
- a、示例1:创建一个简单的Excel文件
- b、示例2:读取Excel文件
- [c、示例3:高级功能 - 添加图表](#c、示例3:高级功能 - 添加图表)

一、QtXlsx库介绍
QtXlsx是一个基于Qt框架的开源库,用于读写Microsoft Excel文件(.xlsx格式)。它无需安装Microsoft Office或Excel组件,通过纯C++实现,支持跨平台(Windows/Linux/macOS)。以下是核心功能和使用方法:
1、核心功能
-
基本读写操作
- 创建工作簿/工作表
- 读写单元格数据(文本、数字、日期)
- 支持公式计算(如
$$ \text{SUM}(A1:A10) $$
) - 合并单元格
-
格式设置
- 字体样式(大小、颜色、加粗)
- 单元格填充(背景色、渐变)
- 边框样式(实线、虚线)
- 对齐方式(居中、自动换行)
-
高级功能
- 插入图片(PNG/JPG)
- 生成图表(柱状图、折线图)
- 处理超链接
- 加密/解密工作簿
2、安装方法
-
源码编译
bashgit clone https://github.com/QtExcel/QtXlsxWriter.git cd QtXlsxWriter qmake make make install
-
Qt项目配置
在.pro
文件中添加:proinclude(/path/to/QtXlsxWriter/src/xlsx.pri)
3、基础代码示例
写入Excel文件
cpp
#include <QtXlsx>
int main() {
QXlsx::Document xlsx;
xlsx.write("A1", "Hello QtXlsx!"); // 写入文本
xlsx.write("B1", 3.14); // 写入数字
xlsx.write("C1", QDate::currentDate()); // 写入日期
xlsx.saveAs("Demo.xlsx"); // 保存文件
return 0;
}
读取Excel文件
cpp
QXlsx::Document xlsx("Demo.xlsx");
QString text = xlsx.read("A1").toString(); // 读取A1单元格
double num = xlsx.read("B1").toDouble(); // 读取B1数字
4、格式设置示例
cpp
QXlsx::Format headerFormat;
headerFormat.setFontBold(true);
headerFormat.setFontColor(Qt::blue);
headerFormat.setPatternBackgroundColor(QColor("#FFFF00")); // 黄色背景
xlsx.write("A1", "Header", headerFormat);
xlsx.mergeCells("A1:C1"); // 合并单元格
5、注意事项
-
兼容性
- 仅支持
.xlsx
格式(Excel 2007+),不支持旧版.xls
。 - 部分复杂公式(如数组公式)可能无法解析。
- 仅支持
-
性能优化
- 大批量数据写入时,使用
QXlsx::CellRange
批量操作提升效率。 - 避免频繁保存文件,应在完成所有操作后调用
saveAs()
。
- 大批量数据写入时,使用
-
依赖项
- 需Qt 5.0+,核心模块仅依赖
QtCore
和QtGui
。
- 需Qt 5.0+,核心模块仅依赖
-
常见问题
- 中文乱码:确保文件编码为UTF-8,使用
QString::fromUtf8()
处理文本。 - 图表渲染:需手动调用
xlsx.insertChart()
并指定数据范围。
- 中文乱码:确保文件编码为UTF-8,使用
6、应用场景
- 自动化报表生成
- 数据导出/导入工具
- 科研数据处理(如导出 y = sin ( x ) y = \sin(x) y=sin(x)计算结果)
- 企业级数据管理系统
通过灵活的组合,QtXlsx可满足从基础数据导出到复杂格式报表的全场景需求,且无需额外依赖Office组件。
二、编译QtXlsx库
1、获取QtXlsx源代码
首先需要获取QtXlsx的源代码:
从GitHub克隆仓库:git clone https://github.com/dbzhang800/QtXlsxWriter.git
或者直接下载最新发布版本:https://github.com/dbzhang800/QtXlsxWriter/releases
2、使用qmake编译
1、打开Qt命令行工具(对应你使用的Qt版本)
2、进入QtXlsxWriter目录
3、执行以下命令:
c
qmake
make
make install
默认安装路径为/usr/local,你可以通过修改.pro文件中的target.path来更改安装路径。
3、使用CMake编译(推荐Qt5.15+)
c
mkdir build
cd build
cmake ..
make
sudo make install
三、在Qt项目中使用QtXlsx
1、在.pro文件中添加配置
c
# 添加包含路径和链接库
INCLUDEPATH += /usr/local/include/QtXlsx
LIBS += -L/usr/local/lib -lQtXlsx
# 对于Windows系统可能需要指定具体路径
win32 {
INCLUDEPATH += C:/QtXlsx/include/QtXlsx
LIBS += -LC:/QtXlsx/lib -lQtXlsx
}
2、基本使用示例
a、示例1:创建一个简单的Excel文件
cpp
#include <QtXlsx/QtXlsx>
#include <QDebug>
void createSimpleXlsx()
{
QXlsx::Document xlsx;
// 写入数据
xlsx.write("A1", "Hello Qt!");
xlsx.write("A2", 12345);
xlsx.write("B1", QDate::currentDate());
// 设置单元格样式
QXlsx::Format format;
format.setFontBold(true);
format.setFontColor(Qt::blue);
format.setPatternBackgroundColor(Qt::yellow);
xlsx.write("A3", "Styled Text", format);
// 保存文件
if (xlsx.saveAs("Test.xlsx")) {
qDebug() << "Excel文件创建成功!";
} else {
qDebug() << "保存失败!";
}
}
b、示例2:读取Excel文件
cpp
void readXlsxFile(const QString &filename)
{
QXlsx::Document xlsx(filename);
if (!xlsx.load()) {
qDebug() << "无法打开文件:" << filename;
return;
}
// 读取单元格数据
qDebug() << "A1内容:" << xlsx.read("A1");
qDebug() << "A2内容:" << xlsx.read("A2").toInt();
// 遍历工作表
foreach(QString sheetName, xlsx.sheetNames()) {
qDebug() << "工作表:" << sheetName;
xlsx.selectSheet(sheetName);
for (int row = 1; row <= 10; ++row) {
for (int col = 1; col <= 5; ++col) {
QVariant value = xlsx.cellAt(row, col);
if (value.isValid()) {
qDebug() << QString("R%1C%2:").arg(row).arg(col) << value;
}
}
}
}
}
c、示例3:高级功能 - 添加图表
cpp
void createXlsxWithChart()
{
QXlsx::Document xlsx;
// 写入示例数据
for (int i = 1; i <= 5; ++i) {
xlsx.write(i, 1, i); // A1-A5: 1-5
xlsx.write(i, 2, i*i); // B1-B5: 平方
}
// 创建图表
QXlsx::Chart *chart = xlsx.insertChart(3, 4, QSize(300, 300));
chart->setChartType(QXlsx::Chart::CT_Scatter);
chart->addSeries(QXlsx::CellRange("A1:A5"), QXlsx::CellRange("B1:B5"));
// 保存文件
xlsx.saveAs("ChartExample.xlsx");
}
