Handling Microsoft Excel file format - Qt Wiki 里面总结了Qt读写Excel文件的各种常用的方法,包括一些第三方的插件。
通常,在windos系统操作Excel上,QT有两种方式,一是通过COM组件,二是通过QODBC(数据库的方式)。
QODBC读取100MB的Excel文件的时候需要十几分钟,因为太慢,这种方法舍弃。网上推荐是使用QAxObject通过COM组件读取,但是这个用法有问题,当机器没有安装Office的时候,是不能调用成功的,即使安装了WPS和VBA也一样不行。
使用第三方库(好处是QT5支持的平台都可以使用,不限于windows系统):
在上面网址里面找到了两个跟Qt有关的插件用来读写Excel,分别是QXlsx 和 QtXlsx,后者从2014年已经不维护了,QXlsx是基于QtXlsx的。
这两个都是基于MIT license的,可以商用,但是要声明原作者的license,否则也是不合法的。(MIT是和BSD一样宽范的许可协议,作者只想保留版权,而无任何其它限制。也就是说,你必须在你的发行版里包含原许可协议的声明,无论你是以二进制发布的还是以源代码发布的。)
(1)下面介绍一下QtXlsx的使用方法(使用源码):
上面这个是它的demo,上面有详细使用介绍,也有源码链接,很强大的东西。
Source code: | GitHub - dbzhang800/QtXlsxWriter: .xlsx file reader and writer for Qt5 |
从上面地址上可以下载下来QtXlsxWriter-master.zip,里面找到xlsx源码文件夹(主要用到包含qtxlsx.pri、.h、.cpp等文件,xlsx.pro和doc文件夹可能是示例什么的,不用管),将xlsx文件夹复制到项目中,在.pro中配置将该.pri加入到项目中,就可以用了,超简单。包含头文件、命名控件内就可以使用了,使用举例:
直接调用int testXlsx2()就可以啦!!!
#include <QtCore>
#include "xlsxdocument.h"
#include "xlsxconditionalformatting.h"
using namespace QXlsx;
int testXlsx2()
{
Document xlsx;
Format hFmt;
hFmt.setFontBold(true);
xlsx.write("B1", "(-inf,40)", hFmt);
xlsx.write("C1", "[30,70]", hFmt);
xlsx.write("D1", "startsWith 2", hFmt);
xlsx.write("E1", "dataBar", hFmt);
xlsx.write("F1", "colorScale", hFmt);
for (int row=3; row<22; ++row) {
for (int col=2; col<22; ++col)
xlsx.write(row, col, qrand() % 100);
}
ConditionalFormatting cf1;
Format fmt1;
fmt1.setFontColor(Qt::green);
fmt1.setBorderStyle(Format::BorderDashed);
cf1.addHighlightCellsRule(ConditionalFormatting::Highlight_LessThan, "40", fmt1);
cf1.addRange("B3:B21");
xlsx.addConditionalFormatting(cf1);
ConditionalFormatting cf2;
Format fmt2;
fmt2.setBorderStyle(Format::BorderDotted);
fmt2.setBorderColor(Qt::blue);
cf2.addHighlightCellsRule(ConditionalFormatting::Highlight_Between, "30", "70", fmt2);
cf2.addRange("C3:C21");
xlsx.addConditionalFormatting(cf2);
ConditionalFormatting cf3;
Format fmt3;
fmt3.setFontStrikeOut(true);
fmt3.setFontBold(true);
cf3.addHighlightCellsRule(ConditionalFormatting::Highlight_BeginsWith, "2", fmt3);
cf3.addRange("D3:D21");
xlsx.addConditionalFormatting(cf3);
ConditionalFormatting cf4;
cf4.addDataBarRule(Qt::blue);
cf4.addRange("E3:E21");
xlsx.addConditionalFormatting(cf4);
ConditionalFormatting cf5;
cf5.add2ColorScaleRule(Qt::blue, Qt::red);
cf5.addRange("F3:F21");
xlsx.addConditionalFormatting(cf5);
xlsx.saveAs("Book11.xlsx");
Document xlsx2("Book11.xlsx");
xlsx2.saveAs("Book22.xlsx");
return 0;
}
总结:
1、比QAxObject快,导出秒操作,瞬间完成。
2、调用简单,不需要熟悉VBA使用函数和属性设置。
3、这货只支持.xlsx格式,也就是说旧版.xls格式文件它是不认的,直接报错:QZip: not a zip file! 读出来都是空值。
如果是发现报这样的错误,赶紧把文件另存为.xlsx格式即可。
(2)下面介绍一下QXlsx的使用方法:
https://github.com/QtExcel/QXlsx
上面是下载地址,具体使用方法待后期测试使用后补充。
由于QXlsx是基于QtXlsx的,所以上面的优点都保留了下来,推荐使用最新的QXlsx插件,具体如何使用QXlsx,后期在新的文章里面介绍。
————————————————
版权声明:本文为CSDN博主「elikang」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/elikang/article/details/115173912