栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

使用教程

第一步:

        下载xlslib库,本文建立在xlslib2.5.0版本基础上。

        下载地址xlsLib download | SourceForge.net

第二步:

        切换到解压文件目录xlslibbuildmsvc2008;

        打开项目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:
                xlslibsrcxlslib/sheetrec.h(347): error C2059: 语法错误:“类型”
                xlslibsrcxlslib/sheetrec.h(348): error C2238: 意外的标记位于“;”之前
                xlslibsrcxlslib/formula_expr.h(382): error C2059: 语法错误:“类型”
                xlslibsrcxlslib/formula_expr.h(382): error C2238: 意外的标记位于“;”之前
                解决:去库代码修改这几个文件和使用到的地方,将boolean函数改为_boolean

                问题4:xlslibsrccommonac-config.win32.h(227): error C2371: “int8_t”: 重定义;不同的基类型。
                解决:
                注释掉该行

                问题5:找不到更重头文件,我用的时候是release版本有问题,debug没有。
                解决:
                按照debug版本修改release版本,项目属性、c/c++、附加包含目录,修改为../../src和.这两个路径。

第三步:拷贝编译好的dll和lib文件到项目中,复制xlslibsrc整个路径到项目中,即可使用。

使用心得

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1019572.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号