Qt读写Excel文件的方法介绍,及QtXlsx的使用方法

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的使用方法(使用源码):

http://qtxlsx.debao.me/

上面这个是它的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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值