QXlsx读写excel
QXlsx
是一个用于在 Qt 应用中读写 Excel 文件的第三方库。它提供了丰富的 API,可以方便地操作 Excel 文件的内容。以下是关于
QXlsx
的详细介绍,包括安装、基本用法、读取和写入 Excel 文件的示例。
一、安装 QXlsx
安装环境为linux操作系统。需要安装gui-private模块安装命令如下:
sudo apt install qtbase5-private-dev
注意使用qt时使用root用户打开项目。
1.1 使用 qmake
- 下载 QXlsx 库源代码:QXlsx GitHub
- 将下载的文件解压到你的项目目录中。
- 在你的
.pro
文件中添加以下内容:
include(path/to/qtxlsx/src/xlsx/xlsx.pri)
1.2 使用 CMake
- 下载 QXlsx 库源代码:QXlsx GitHub
- 将下载的文件解压到你的项目目录中。
- 在你的
CMakeLists.txt
中添加以下内容:
add_subdirectory(path/to/qtxlsx)
target_link_libraries(your_project Qt5::Xlsx)
二、基本用法
2.1 写入 Excel 文件
下面的示例代码展示了如何使用 QXlsx
库创建一个新的 Excel 文件并写入一些数据。
#include <QCoreApplication>
#include <QtXlsx/QtXlsx>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QXlsx::Document xlsx;
// 写入数据
xlsx.write("A1", "Hello");
xlsx.write("B2", 123);
xlsx.write("C3", "=SUM(B2, 1)"); // 写入公式
// 保存文件
xlsx.saveAs("example.xlsx");
return a.exec();
}
2. 读取 Excel 文件
下面的示例代码展示了如何使用 QXlsx
库读取一个已存在的 Excel 文件中的数据。
#include <QCoreApplication>
#include <QXlsx>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QXlsx::Document xlsx("example.xlsx");
// 读取数据
QVariant value1 = xlsx.read("A1");
QVariant value2 = xlsx.read("B2");
QVariant value3 = xlsx.read("C3");
qDebug() << "A1:" << value1.toString();
qDebug() << "B2:" << value2.toInt();
qDebug() << "C3:" << value3.toString();
return a.exec();
}
三、详细用法
3.1 设置单元格样式
可以设置单元格的字体、颜色、对齐方式等。
QXlsx::Format format;
format.setFontColor(Qt::red);
format.setFontBold(true);
xlsx.write("A1", "Styled Text", format);
3.2. 合并单元格
可以合并多个单元格。
xlsx.mergeCells("A1:B2");
xlsx.write("A1", "Merged Cells");
3.3. 创建图表
可以创建图表并插入到 Excel 文件中。
QXlsx::Chart *chart = xlsx.insertChart(3, 3, QSize(300, 300));
chart->setChartType(QXlsx::Chart::CT_Line);
QXlsx::CellRange range("A1:B2");
chart->addSeries(range);
3.4. 设置列宽和行高
可以设置指定列的宽度和指定行的高度。
xlsx.setColumnWidth(1, 20); // 设置第一列的宽度为20
xlsx.setRowHeight(1, 30); // 设置第一行的高度为30
四、完整示例
以下是一个综合示例,展示了如何使用 QXlsx
库进行更多操作。
#include <QCoreApplication>
#include <QXlsx>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QXlsx::Document xlsx;
// 写入数据和设置样式
QXlsx::Format format;
format.setFontColor(Qt::blue);
format.setFontBold(true);
xlsx.write("A1", "Hello World", format);
// 合并单元格
xlsx.mergeCells("A2:B3");
xlsx.write("A2", "Merged Cells");
// 设置列宽和行高
xlsx.setColumnWidth(1, 20);
xlsx.setRowHeight(2, 30);
// 创建图表
xlsx.write("A5", 10);
xlsx.write("A6", 20);
xlsx.write("B5", 30);
xlsx.write("B6", 40);
QXlsx::Chart *chart = xlsx.insertChart(7, 1, QSize(300, 300));
chart->setChartType(QXlsx::Chart::CT_Line);
QXlsx::CellRange range("A5:B6");
chart->addSeries(range);
// 保存文件
xlsx.saveAs("example.xlsx");
return a.exec();
}
五、性能优化问题
如果使用QXlsx::Qocument 直接write数据,因为xlsx在写文件的时候不知道你要写的数据是什么因此需要再系统中进行判断,如果已经知道自己需要写的数据类型,建议直接通过获取当前的sheet使用对应的写数据的类型的方式来写数据这样性能会有部分提升。
QApplication a(argc, argv);
QXlsx::Document xlsx;
QXlsx::Worksheet * sheet = ( QXlsx::Worksheet *)xlsx.currentSheet();
QElapsedTimer time,tim2;
for(int k = 0 ; k < 10 ;k ++)
{
time.start();
// 写入数据
for(int i = 0 ; i < 100000; i ++){
for(int j = 0 ; j < 25;j++){
xlsx.write(i,j,"hello");
}
}
qInfo()<<"index:" << k <<"优化前:"<< time.elapsed();
tim2.start();
for(int i = 0 ; i < 100000; i ++){
for(int j = 0 ; j < 25;j++){
sheet->writeString(i,j,"hello");
}
}
qInfo()<<"index:" << k <<"优化后:"<< tim2.elapsed();
}
// 保存文件
xlsx.saveAs("example.xlsx");
性能提高了大于26%左右。
通过上述内容,你应该可以掌握使用 QXlsx
库进行 Excel 文件的读写操作。QXlsx
提供了丰富的 API,可以满足大部分对 Excel 文件操作的需求。
其他QT文章
1. QT开发环境安装以配置。
2. QT线段画板实战
3. 半小时玩转QT桌面系统托盘(含托盘消息)
4. QT入门开发一个时钟
5. 半小时教你做大转盘游戏(QT篇)
6. 手把手教你制作【带吸附效果的线段绘制】(QT)
7. 手把手教你开发-滚动效果号码抽奖(QT)
8. 100行代码实现贪吃蛇小游戏
9.C++实现《扫雷》游戏(入门经典)
10. svg转图片工具开发
11. Qt网路与通信(获取本机网络信息)
12. Qt网路与通信(UDP客户与服务)
13. Qt网络与通信(TCP聊天室)
14. Qt多线程以及线程池
15. Qt散点图、折线图、柱状图、盒须图、饼状图、雷达图开发实例
16. 取色器(QT)
17. MQTT客户端入门开发
18.QT文件上传带进度条实例(含源码)
19. Qt音乐播放器开发实例(可毕设含源码)
20. Qt学生管理系统-- 数据库课程设计(付源码)