使用教程
第一步:
下载xlslib库,本文建立在xlslib2.5.0版本基础上。
下载地址xlsLib download | SourceForge.net
第二步:
切换到解压文件目录xlslib\build\msvc2008\;
打开项目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};
问题3:
xlslibsrc\xlslib/sheetrec.h(347): error C2059: 语法错误:“类型”
xlslibsrc\xlslib/sheetrec.h(348): error C2238: 意外的标记位于“;”之前
xlslibsrc\xlslib/formula_expr.h(382): error C2059: 语法错误:“类型”
xlslibsrc\xlslib/formula_expr.h(382): error C2238: 意外的标记位于“;”之前
解决:去库代码修改这几个文件和使用到的地方,将boolean函数改为_boolean
问题4:xlslibsrc\common\ac-config.win32.h(227): error C2371: “int8_t”: 重定义;不同的基类型。
解决:
注释掉该行
问题5:找不到更重头文件,我用的时候是release版本有问题,debug没有。
解决:
按照debug版本修改release版本,项目属性、c/c++、附加包含目录,修改为../../src和.这两个路径。
第三步:拷贝编译好的dll和lib文件到项目中,复制xlslib\src整个路径到项目中,即可使用。
使用心得
1.使用时使用workbook.xformat();后,通过xf_t* xf1 = xf_t::xfDup(xf);创建新的格式,注意要使用不同的格式时需要再次通过xf_t* xf2 = xf_t::xfDup(xf);创建新的格式,不然后面修改xf1会导致之前已使用了xf1的也跟着改变。然后使用workbook.sheet(Str.GetString())->blank(i, j, xf);先把所有需要设置边框的单元格设置上边框,注意,就算是通过workbook.sheet(Str.GetString())->merge合并了,也需要当做没合并之前的单元格位置进行设置,不然就只有合并单元格最前面那个有边框,如下图:
2.在uncode编码下,一般vs默认就是这个时,请传递label(),等函数wstring(CString/wchar_t),而不是string,不然会中文乱码的,网上说的自己添加判断什么utf-8的,感觉不用添加啊,大不了就是使用wstring或者string中的一个,试一下那个不乱码就用那个。
3.发现单元格不自动换行,暂时没有找到好的办法,但是可以通过设置xf2->SetHAlign(HALIGN_JUSTIFY);进行解决,然后配合空格控制显示在中间,如下图(下划线表示空格):
4.单元格宽度问题,office不识别ws->colwidth(i, 256 * 5);设置的值,但是wps能识别宽度设置。可以通过ws->defaultColwidth(5);进行设置即可,文档里说ws->defaultColwidth参数需要*256,但实际测试不需要。
中文说明文档:xlslib中文说明文档-C++文档类资源-CSDN下载