1下载xlslib库
https://sourceforge.net/projects/xlslib/?source=directory
我下载的是
xlslib-package-2.5.0.zip
解压
在xlslib\xlslib\build目录中寻找你的编译器对应的版本 里面有sln文件
我用的msvc2010
xlslib\xlslib\build\msvc2010\xlslib.sln
我们需要的只有xlslib_dll动态或者xlslib_lib静态
打开后提示两个错误
A OpenEXR\IlmBase\vc\vc10\IlmBase\createDLL\createDLL.vcxproj: error : 未能找到项目“xlslib\OpenEXR\IlmBase\vc\vc10\IlmBase\createDLL\createDLL.vcxproj”。
B build\msvc2010\xlslib_lib.vcxproj : error : 筛选器“SourceFiles”的结果中,已存在项“....\src\xlslib\formula.cpp”
第一个问题A解决
将xlslib\OpenEXR\IlmBase\vc\vc10\IlmBase\createDLL\createDLL.vcproj 改成createDLL.vcxproj之前的少了一个x
你对应的版本是VC1012 就去对应的目录里面改。
第二个问题B解决
xlslib\xlslib\build\msvc2010\xlslib_lib.vcxproj用记事本或者notepated++(推荐) 打开编辑
324行和325行
<ClCompile Include="..\..\src\xlslib\formula.cpp"/>
两行都是 这个
删除其中一行,只保留一行就行。
重新打开xlslib.sln工程没有错误。
编译出现错误。
1 “sheet_notes”前的类型(构造函数有返回类型或是当前类型名称的非法重定义?)
解决
src/xlslib/note.h
44-47行
struct sheet_notes
{
uint16_t sheet_idx
uint16_t sheet_notes;
}
成员sheet_notes和结构名一样冲突了
修改成员名unit16_t sheet_notes为uint16_t sheet_notes__只要不冲突就行。
后续用到这个变量的地方也修改,这个编译的时候会提示的。
note.cpp(342) last_sheet.sheet_notes__
note.cpp(355) sn.sheet_notes__
note.cpp(358) sn.sheet_notes__
2 formula.cpp(917) error C2059 语法错误"{"
解决
将function_propertyp = (function_property) {CELLOP_AS_VALUE, A_UNKNOWN};
修改为
function_property p ={CELLOP_AS_VALUE, A_UNKNOWN};
去掉 (function_property)
3测试的例子也有错误
targets\test\md5.c(464): error C2143: 语法错误 : 缺少“;”(在“类型”的前面)
3>....\targets\test\md5.c(467): error C2065: “bload”: 未声明的标识符
这个是.c语法 后面申明了 int bload
将Int bload提到该函数的最前面一行
再次编译 提示错误
char const * __cdecl check_file(char const *,char const *)
这个是由于c文件导出函数接口不同
在Target/test/md5.h
将
#if defined(__cplusplus)
extern "C"
{
#endif
#if defined(__cplusplus)
}
#endif
注释取消掉
再次编译KO
有些测试的例子代码有问题。自己修改吧。其他的没问题
Bin目录运行
xlslib-testC.exe
看看 testC.xls 已经成功了
写入中文
xlsWorksheetLabelW(ws, row++, col,L"你好。中国", NULL);
OK
如果使用静态库 你会发现编译好的Lib有几十M 甚至DEBUG的都比release的要小
只是为什么呢?
在xlslib_lib右键 属性 配置属性 C/C++ 优化 全程序优化 选择否 Lib就非常小了
没有全程序优化带着这个几十M的lib