1 xlnt
xlnt:地址 xlnt: xlnt是一个现代的C ++库,用于处理内存中的电子表格,并按照ECMA 376第4版的说明从XLSX文件读取/写入
要求标准 C++14,由于公司项目环境为qt +vs2010,环境版本太低不支持,因此未使用,期间查询时,发现网上评价可观,手册和使用教程也教容易找到,以后条件满足时使用。
2 xlslib
xlslib:xlsLib download | SourceForge.net
2.1 动态链接库项目 xlslib_dll的编译
编译,会出现sheet_notes的错误。sheet_notes 非法重定义,或构造函数不能返回类型。
这个错误的原因是,结构体sheet_notes的类型名称和变量命令相同了。由于C/C++中,结构体可以有构造函数,所以,这两个名称是不能相同的。编译器会将成员变量当成是构造函数,从而报错。
解决办法是,修改其中一个的名字,只要两个不相同就ok。由于成员变量sheet_notes被用到只有3次,而结构体被用到很多次。于是,修改成员变量。
再编译,还会提示一个 function_property 的错误
这是由于使用了大括号初始化成员,导致编译错误
修改为如下代码:
再编译,修改以上两处错误后,在由于项目在“生成事件” --> "后期生成事件"的命令行参数中添加了 以下指令,导致编译错误;
echo $(SolutionDir)bin/Win32_MSVC2010.$(Configuration)\createDLL -M$(Platform) -n$(OutDir)$(ProjectName).map -l$(IntDir) -i$(OutDir)$(ProjectName).lib -W$(SolutionDir)obj/$(ProjectName)_$(Platform)_MSVC2010.$(Configuration)\
$(SolutionDir)bin/Win32_MSVC2010.$(Configuration)\createDLL -M$(Platform) -n$(OutDir)$(ProjectName).map -l$(IntDir) -i$(OutDir)$(ProjectName).lib -W$(SolutionDir)obj/$(ProjectName)_$(Platform)_MSVC2010.$(Configuration)\
删掉上面指令,就可以生成成功,但是由于未导出信息,在使用动态库文件时,会出现链接错误,暂未找到解决方案,也许可以自己添加导出声明;
2.2 静态链接库 xlslib_lib
此版本的此项目加载不成功,在输出窗口看到有个文件“formula.cpp”有两个,删除其中一个后加载成功,修改了动态链接库中的代码问题后,编译成功,经简单测试,可以使用。
3 SPLib 此库不支持读取Excel
此项目依赖ZLib,在网上找到windows 版本的库文件,导出了lib文件后生成了splib的库,还未测试使用,
由于此库不支持单元格合并,因此未使用;
最终采用2方案
4 libxl
libxl:C++ Excel Library to read/write xls/xlsx files - LibXL