C++导出EXCEL开源库xlslib库使用心得

使用教程

第一步:

        下载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下载

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值