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

Qt 使用QtXlsx库处理Excel文件

Qt 使用QtXlsx库处理Excel文件

  • 一、QtXlsx库介绍
    • 1、核心功能
    • 2、安装方法
    • 3、基础代码示例
    • 4、格式设置示例
    • 5、注意事项
    • 6、应用场景
  • 二、编译QtXlsx库
    • 1、获取QtXlsx源代码
    • 2、使用qmake编译
    • 3、使用CMake编译(推荐Qt5.15+)
  • 三、在Qt项目中使用QtXlsx
    • 1、在.pro文件中添加配置
    • 2、基本使用示例
      • a、示例1:创建一个简单的Excel文件
      • b、示例2:读取Excel文件
      • c、示例3:高级功能 - 添加图表

在这里插入图片描述

一、QtXlsx库介绍

QtXlsx是一个基于Qt框架的开源库,用于读写Microsoft Excel文件(.xlsx格式)。它无需安装Microsoft Office或Excel组件,通过纯C++实现,支持跨平台(Windows/Linux/macOS)。以下是核心功能和使用方法:


1、核心功能

  1. 基本读写操作

    • 创建工作簿/工作表
    • 读写单元格数据(文本、数字、日期)
    • 支持公式计算(如$$ \text{SUM}(A1:A10) $$
    • 合并单元格
  2. 格式设置

    • 字体样式(大小、颜色、加粗)
    • 单元格填充(背景色、渐变)
    • 边框样式(实线、虚线)
    • 对齐方式(居中、自动换行)
  3. 高级功能

    • 插入图片(PNG/JPG)
    • 生成图表(柱状图、折线图)
    • 处理超链接
    • 加密/解密工作簿

2、安装方法

  1. 源码编译
    git clone https://github.com/QtExcel/QtXlsxWriter.git
    cd QtXlsxWriter
    qmake
    make
    make install
    
  2. Qt项目配置
    .pro文件中添加:
    include(/path/to/QtXlsxWriter/src/xlsx.pri)
    

3、基础代码示例

写入Excel文件

#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文件

QXlsx::Document xlsx("Demo.xlsx");
QString text = xlsx.read("A1").toString(); // 读取A1单元格
double num = xlsx.read("B1").toDouble();    // 读取B1数字

4、格式设置示例

QXlsx::Format headerFormat;
headerFormat.setFontBold(true);
headerFormat.setFontColor(Qt::blue);
headerFormat.setPatternBackgroundColor(QColor("#FFFF00")); // 黄色背景xlsx.write("A1", "Header", headerFormat);
xlsx.mergeCells("A1:C1"); // 合并单元格

5、注意事项

  1. 兼容性

    • 仅支持.xlsx格式(Excel 2007+),不支持旧版.xls
    • 部分复杂公式(如数组公式)可能无法解析。
  2. 性能优化

    • 大批量数据写入时,使用QXlsx::CellRange批量操作提升效率。
    • 避免频繁保存文件,应在完成所有操作后调用saveAs()
  3. 依赖项

    • 需Qt 5.0+,核心模块仅依赖QtCoreQtGui
  4. 常见问题

    • 中文乱码:确保文件编码为UTF-8,使用QString::fromUtf8()处理文本。
    • 图表渲染:需手动调用xlsx.insertChart()并指定数据范围。

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、执行以下命令:

qmake
make
make install

默认安装路径为/usr/local,你可以通过修改.pro文件中的target.path来更改安装路径。

3、使用CMake编译(推荐Qt5.15+)

mkdir build
cd build
cmake ..
make
sudo make install

三、在Qt项目中使用QtXlsx

1、在.pro文件中添加配置

# 添加包含路径和链接库
INCLUDEPATH += /usr/local/include/QtXlsx
LIBS += -L/usr/local/lib -lQtXlsx# 对于Windows系统可能需要指定具体路径
win32 {INCLUDEPATH += C:/QtXlsx/include/QtXlsxLIBS += -LC:/QtXlsx/lib -lQtXlsx
}

2、基本使用示例

a、示例1:创建一个简单的Excel文件

#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文件

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:高级功能 - 添加图表

void createXlsxWithChart()
{QXlsx::Document xlsx;// 写入示例数据for (int i = 1; i <= 5; ++i) {xlsx.write(i, 1, i);     // A1-A5: 1-5xlsx.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");
}

在这里插入图片描述

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

相关文章:

  • AR技术赋能能源勘探:从数据可视化到智能预测的革命性突破
  • 《解构Angular组件变化检测:从自动到手 动的效能突破》
  • 【Git 误操作恢复指南】
  • 如何安装 nvm-setup.exe?Windows 安装 NVM 管理 Node.js 版本的完整流程(附安装包下载)
  • 配置Mybatis环境
  • ollama解锁LLM生成上下文长度
  • 墨者学院SQL过滤字符后手工绕过漏洞测试(万能口令)
  • Lifelong Learning and Selective Forgetting via Contrastive Strategy
  • 深度学习图像处理篇之AlexNet模型详解
  • docker镜像源配置教程,以及解决安装好docker配置镜像源后,出现报错。Job for docker.service failed
  • 洛谷做题11:P1424 小鱼的航程(改进版)
  • Android Espresso 测试框架深度解析:从入门到精通
  • GCC与AI:编译优化新革命
  • PHP进阶语法详解:命名空间、类型转换与文件操作
  • 第二十四天(数据结构:栈和队列)队列实践请看下一篇
  • 进一步分析云手机的优势有哪些?
  • 论文Review LIO Multi-session Voxel-SLAM | 港大MARS出品!体素+平面特征的激光SLAM!经典必读!
  • JAVA,springAOP
  • 开源的现代数据探索和可视化平台:Apache Superset 使用 Docker Compose
  • 【盘古100Pro+开发板实验例程】FPGA学习 | 基于 UDP 的以太网传输实验例程
  • <PhotoShop><JavaScript><脚本>基于JavaScript,利用脚本实现PS软件批量替换图片,并转换为智能对象?
  • Android的UI View是如何最终绘制成一帧显示在手机屏幕上?
  • 设计模式 -> 策略模式(Strategy Pattern)
  • 【优选算法】分治--归并排序
  • HTTP各个版本对比
  • 【核心技术二】Uvicorn:高性能 ASGI 服务器
  • AI开发框架与工具:构建智能应用的技术基石
  • 使用vue缓存机制 缓存整个项目的时候 静态的一些操作也变的很卡,解决办法~超快超简单~
  • FrePrompter: Frequency self-prompt for all-in-one image restoration
  • RAG中的评估指标总结:BLEU、ROUGE、 MRR、MAP、nDCG、Precision@k、Recall@k 等