libxl 学习之 excel 读写操作

最近工作需要,需要读写 excel,在网上看了好几个教程,尤其是基于 MFC 库的那个,配置起来太难了,死活加载不上 worksheets 跟 workbooks 头文件 ,放弃ing

无意间看到 libxl 读单元格的例子,顿觉清新明了眼前一亮,研究了一下午,掌握基本操作。

libxl 下载官网:http://www.libxl.com/

libxl 函数说明:http://www.libxl.com/documentation.html

下载包里有各类语言 example,百度上有说明,比较详细

网址:http://wenku.baidu.com/view/8ff2d43a0912a2161479299f.html?from=search

环境配制简单,libxl.lib、libxl.dll、include 头文件直接放到工程目录下取,没多大。

example 上面主要是 xls 文件,说一下 xlsx 文件的读写吧。

Book * bookxml = xlCreateXMLBook();
bool  xmload = bookxml->load(path);
Sheet * sheetxml = bookxml->getSheet(0);

path 是文件路径,const wchar_t * 格式,如果调用的话需要注意格式问题,宽字符毕竟还是麻烦。

不带汉字的路径

string  path1;
wstring  path2(path1.begin(), path1.end());
const wchar_t * path = path2.c_str();
可以直接转换,很方便,带汉字比较麻烦,转换如下:

int lenth = MultiByteToWideChar(CP_ACP, 0, filepath.c_str(), filepath.size(), NULL, 0); 
if(lenth < 0)return -2; 
wchar_t * path = new wchar_t[lenth+1]; 
if(path == NULL)return -2; 
MultiByteToWideChar(CP_ACP, 0, filepath.c_str(), filepath.size(), path, lenth); 
path[lenth] = '\0'; 
filepath 为 string 类型。

getSheet(0)表示取第一个sheet页。

Format * xmlmat = bookxml->addFormat();
xmlmat->setBorder(BORDERSTYLE_THIN);	
xmlmat->setAlignH(ALIGNH_CENTER);
设置单元格边框及居中

libxl::Font * xmlfont = bookxml->addFont();
xmlfont->setBold();
xmlfont->setSize(11);
设置字体大小及粗细,Size 可用,bold 无效,鬼知道什么原因

读写注意宽字符

swprintf(val, L"%S ", data1[k].c_str()); 
sheetxml->writeStr(nk, k+1, val);
合并单元格

sheetxml->setMerge(height, height, 5, 6);
para1起始行,para2结束行,para3起始列,para4结束列

合并后写的话要特别注意,如合并5,6,实际单元格6还在,写入5或者写入6效果相同。

差不多就这样吧。






猜你喜欢

转载自blog.csdn.net/u010477528/article/details/53857396