QtXlsx 是一个在Qt框架下使用的三方库. 可以很方便的对Excel文档进行读写等操作.而且不需要Office驱动或者WPS的安装,且是跨平台的.需要做报表时, 这是一个十分不错的选择哦.
原文链接:https://blog.csdn.net/love100628/article/details/72956486
1、安装Perl(编译Qxlsx源码用)
编译Qxlsx源码需要用到Perl5,所以先安装perl5.
perl5地址:https://www.perl.org/get.html
打开上面的网址,选择 ActiveState Prel
(如果觉得官网下载慢,可以去网上找百度云盘的资源,很多都有)
安装成功了测试
2、下载源代码
源代码:
官当网站: http://qtxlsx.debao.me/
Git托管: https://github.com/dbzhang800/QtXlsxWriter
许可证: MIT
下载完成,解压:
打开文件夹就是
3、编译安装
如果你是Linxu中
cd 文件路径/QtXlsxWriter-masterls 查看你是否在qtxlsx.pro 文件夹下
一步一步执行下面命令
qmake qtxlsx.pro
make
make install
如果你是window端,打开
如果你是MinGW
qmake qtxlsx.pro
Mingw32-make
Mingw32-make install
如果你是MSVC
qmake qtxlsx.pro
nmake
nmake install
一般MinGW没有什么编译问题,如果MSVC出现编译问题一般是
nmake -f makefile.win32时报错: fatal error u1077:path/c1.exe 返回代码0x2
解决思路一:
网上大部分解决方案是:直接在MSVC中
,输入vcvars32.bat并执行该文件即可;
解决思路二:
如果上述方法不好使,便需要考虑有可能是代码本身的原因。仔细再检查下代码是否有明显语法等,我的情况就是因为初始化成员变量时为了代码整齐多敲了几个空格,导致报上述错误。
【补充:】返回0x2错误时,第一反应先检查代码本身,在CMD窗口中往上翻,会有error的错误原因以及定位行;
Windows下nmake其他错误对应原因参考:
1.NMAKE:fatal error U1077.“cl.exe” return code 0xc0000135
产生原因:在安装visual studio的时候没有勾选注册环境变量导致的。
解决办法:在系统环境变量中加入visual studio的安装路径:vs安装路径\VC\Bin,以及vs安装路径\Common7\IDE
2.NMAKE:fatal error U1077. return code 0x2
产生原因:找不到代码文件中包含的头文件
解决办法:cmd下进入到vs安装路径\VC\Bin下,执行vcvars32,此时会执行vcvas32.bat自动为vs设置环境变量
3.NMAKE:fatal error U1077. return code 0x460
产生原因:你的工程中连接了一个lib文件,链接的时候却出现不能解析的外部符号。可能问题是你包含的lib是错的,或者有不兼容问题。我的问题就是后者,我的系统的32位的,但是链接了一个64位的lib.
解决办法:链接正确的lib
仅供参考,也许是别的原因,可以继续搜索。
原文链接:https://blog.csdn.net/sean4m/article/details/60143222
4、最后测试环境
新建工程测试一下
#include <QtCore/QCoreApplication>
#include <QtXlsx/QtXlsx>
#if _MSC_VER > 1000
#pragma comment(lib,"Qt5Xlsxd.lib")
#endif
#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QXlsx::Document xlsx; //
QXlsx::Format format; //格式化对象
format.setHorizontalAlignment(QXlsx::Format::AlignHCenter);//水平居中
format.setVerticalAlignment(QXlsx::Format::AlignVCenter);//垂直居中
format.setBorderStyle(QXlsx::Format::BorderThin);//设置边框
format.setShrinkToFit(true);//单元格内容缩放
xlsx.write(3, 1, "Hello world!", format);//A3
xlsx.write(4, 1, "Hello Qt!", format);//A4
xlsx.write("B3", 250);
xlsx.mergeCells("B3:D4", format); // 合并单元格 B3:D4
format.setFontBold(true);
format.setFontSize(24);
format.setFontColor(Qt::red);
xlsx.write("A1", "报表标题"); // 大标题
xlsx.insertImage(1, 3, QImage("nike.png"));//传入LOGO
xlsx.mergeCells("A1:D2", format); // 合并单元格 A1:D2
xlsx.saveAs("test.xlsx");
return a.exec();
}