Linux/Mingw Excel (*.xls)文件读取,使用libxls库
来源:互联网 发布:pr软件是什么意思 编辑:程序博客网 时间:2024/06/03 20:07
转载地址:http://www.awaysoft.com/taor/linuxmingw-excel-xls%E6%96%87%E4%BB%B6%E8%AF%BB%E5%8F%96%EF%BC%8C%E4%BD%BF%E7%94%A8libxls%E5%BA%93.html
做个项目需要读取xls文件,通过搜索,找到三个库,BasicExcel、libxl、libxls。
因为BasicExcel不支持中文,而且06年就没更新了,果断放弃。libxl感觉是这三个库中最好的,能读能写,对格式支持也最好,但是考虑到项目只需要读取,而且这是商业软件,授权也不便宜,也放弃了。
首先下载libxls,项目地址:http://sourceforge.net/projects/libxls/
解压后使用:
安装,请注意,在configure前,一定要安装libiconv-dev,否则中文显示可能不正常。
安装后,编写测试代码:
#include <stdio.h>#include <xls.h> // 要打开的文件名const char fileName[] = "data/1.xls";// 所有通过libxls库获取的字符串的编码const char charSet[] = "UTF-8"; void testLibxls(){// 工作簿xlsWorkBook *pWB = NULL;// 工作表xlsWorkSheet *pWS = NULL;// 单元格xlsCell * cell = NULL; int sheetIndex;int row, col; // 打开文件pWB = xls_open(fileName, charSet);if (!pWB) {fprintf(stderr, "Open File Error!\n");return ;}// 解析xls文件,这个不要忘了xls_parseWorkBook(pWB); fprintf(stderr, "Sheet count:%d\n", pWB->sheets.count); // 读取每个工作表for (sheetIndex = 0; sheetIndex < pWB->sheets.count; ++sheetIndex) {// 获取工作表pWS = xls_getWorkSheet(pWB, sheetIndex);// 解析工作表xls_parseWorkSheet(pWS);fprintf(stderr, "Sheet %d name: %s\n", sheetIndex, (char *)pWB->sheets.sheet[sheetIndex].name); fprintf(stderr, "Sheet Data:\n");// 每行for (row = 0; row < pWS->rows.lastrow; ++row) {// 该行第几列for (col = 0; col < pWS->rows.lastcol; ++col) {// 获取单元格,这里也可以通过xls_row获取到这行的数据,然后,使用row->cells来获取单元格cell = xls_cell(pWS, row, col);// 判断单元格及内容是否为空if (cell && cell->str) {fprintf(stderr, "%s", (char *)cell->str);}fprintf(stderr, ",");}fprintf(stderr, "\n");}fprintf(stderr, "\n");// 关闭工作表xls_close_WS(pWS);}// 关闭工作簿xls_close_WB(pWB);} int main(){fprintf(stderr, "testLibxls\n");testLibxls(); getchar();return 0;}
编译命令
libxls函数说明:
// 获取libxls版本号externconstchar*xls_getVersion(void);// 设置libxls调试信息,debug>0会显示libxls的调试信息externintxls(intdebug);// Set debug. Force library to load?// 这个没有研究,不知道干嘛的,感觉像是自定义解析excel的公式externvoidxls_set_formula_hander(xls_formula_handlerhandler); // 解析工作簿externvoidxls_parseWorkBook(xlsWorkBook*pWB);// 解析工作表externvoidxls_parseWorkSheet(xlsWorkSheet*pWS); // 打开工作簿,charset默认UTF-8externxlsWorkBook*xls_open(constchar*file,constchar*charset);// 关闭工作簿#define xls_close xls_close_WB // historicalexternvoidxls_close_WB(xlsWorkBook*pWB); // preferred name // 获取工作表externxlsWorkSheet*xls_getWorkSheet(xlsWorkBook*pWB,intnum);// 关闭工作表externvoidxls_close_WS(xlsWorkSheet*pWS); // 获取工作簿信息,作者啊之类的externxlsSummaryInfo*xls_summaryInfo(xlsWorkBook*pWB);// 关闭工作簿信息externvoidxls_close_summaryInfo(xlsSummaryInfo*pSI); // 获取工作表某行xlsRow*xls_row(xlsWorkSheet*pWS,WORDcellRow);// 获取某个单元格,从参数可以看出,libxls最大支持65536行、65536列的工作表xlsCell*xls_cell(xlsWorkSheet*pWS,WORDcellRow,WORDcellCol);
合并单元格
通过查看libxls的代码可以发现,libxls对于合并单元格的信息保存在xlsCell中,其中str是内容,colspan>0表示横向合并多少个单元格,rowspan表示纵向合并多少个单元格,被合并的单元格isHidden都是1。
0 0
- Linux/Mingw Excel (*.xls)文件读取,使用libxls库
- Ubuntu下C程序使用libxls-1.2.1库去读取excel表格内容
- QT 读取 EXCEL XLS文件
- 前端读取Excel文件(使用js-xls插件)
- java使用POI读取excel文件,兼容xls和xlsx
- libxls库的使用
- 使用python读取xls文件
- matlab中读取excel的xls文件
- C++读取Excel文件(97-2000) *.xls
- java读取Excel 格式.xls文件
- POI读取EXCEL下xlsx,xls文件
- Java 读取excel xls以及xlsx文件
- C# —— 使用C# NPOI 读取Excel(.xls)文件
- 用Python读取Excel(*.xls)文件——xlrd模块的使用
- java使用POI实现excel文件的读取,兼容后缀名xls和xlsx
- java使用poi读取xls格式和xlsx格式的excel文件
- Java读取XLS文件-JXL的使用
- 使用 PHPExcel 读取\修改 xls文件
- 粒子渲染与NGUI渲染层级深度问题分析
- Linux忘记root密码的解决办法
- typedef和# define
- ci(codeigniter)php框架再探-页面访问流程
- java学习——面向对象篇
- Linux/Mingw Excel (*.xls)文件读取,使用libxls库
- 全球Google Play市场分析报告
- 搜索关键字高亮。content是全部的String keyWord是关键字。TextView是后面要SET改变的一个TextView
- 【java】【第二章】【变量】
- RedHat 系统使用yum网络源
- JNI方法签名规则
- 让我无语的cd,因为cd 彻底被挖苦完了
- 在ios中开放中,id 类型和instancetype区别
- getlasterror