libxls作为开源库,支持在Linux C/C++ 环境下解析(读)xls文件,github提供了源码:

https://github.com/libxls/libxls

但是github的源码需要一堆辅助工具,才能够编译出libxls的C静态库,因此琢磨了下手动编译libxls的静态库/动态库方法,可以摆脱辅助工具缺失乃至版本问题导致的抓狂,尤其适合不方便联网的内网开发环境。

将fuzz、src、include目录下所有文件拷贝到一个目录下,修改*.c和*.h文件中指定的include文件路径为当前目录下
然后将locale.c、endian.c、fuzz_xls.c、ole.c、xls.c、xlstool.c编译成相应的.o文件
locale.h文件中需要添加语句“#include<stddef.h>”
gcc -c locale.c
gcc -c endian.c
gcc -c ole.c
gcc -c xls.c
gcc -c xlstool.c
gcc -c fuzz_xls.c -std=c99 (fuzz_xls.c源文件需要指定c99标准)
选择test.c编译成.o文件
gcc -c test.c
将所有.o文件链接在一起生成可执行demo程序
gcc locale.o endian.o fuzz_xls.o ole.o xls.o xlstool.o test.o -o demo
也可以将locale.o、endian.o、fuzz_xls.o、ole.o、xls.o、xlstool.o编译成静态库
ar -rc libxls.a locale.o endian.o fuzz_xls.o ole.o xls.o xlstool.o

gcc -c test.c -L . -lxls -o demo

或者将locale.o、endian.o、fuzz_xls.o、ole.o、xls.o、xlstool.o编译成动态库
gcc -fPIC -shared locale.o endian.o fuzz_xls.o ole.o xls.o xlstool.o -o libxls.so

demo程序链接库
gcc test.c -L . -lxls -o demo

如果想要在C++代码中使用libxls,需要将XlsReader.cpp和XlsReader.h编译后链接到程序
g++ XlsReader.cpp main.cpp -L. -lxls -o demo -std=c++11

编写一个xls文件中获取指定id行的信息的demo:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cctype>#include "XlsReader.h"using namespace std;
using namespace xls;int main(int argc, char *argv[])
{if (argc < 2){cout << "Usage: ./demo  <file.xls>" << endl;exit(1);}string width,  depth;int id = 3;flaot size[2] = {0};string file = string(argv[1]);WorkBook foo(file);cellContent cell = foo.GetCell(0, 1, 2);for (int sheetNum = 0; sheetNum < foo.GetSheetCount; ++ sheetNum) //遍历xls所有sheet的列表{if  ( "sheet 1" != foo.GetSheetName(sheetNum) ) //选择sheet 1continue;cout << "find sheet 1." << endl;foo.InitIterator(sheetNum);while (ture){cellContent c = foo.GetNextCell();if (c.type == cellBlank)break;if (c.row == 1)continue;if (c.col == 1){if (stoi(c.str) == id){width.assign(foo.GetCell(sheetNum, c.row, 3).str);depth.assign(foo.GetCell(sheetNum, c.row, 4).str);break;  //找到后即退出}}}}size[0] = atof(width.c_str());size[1] = atof(depth.c_str());cout << "Die No. : " << id << ", width: " << size[0] << ", depth: " << size[1] << endl;return 0;
}

Linux C/C++解析xls相关推荐

  1. python的openpyxl模块下载_python解析.xls/.xlsx文件–openpyxl模块(第三方)

    围观人数: 7 标签:book   set   tle   命令行   文件中   不能   charm   读取   pen 第一part:Excel文件的介绍 Microsoft Excel是Mi ...

  2. 嵌入式linux面试题解析(二)——C语言部分三

    嵌入式linux面试题解析(二)--C语言部分三 1.下面的程序会出现什么结果 #include <stdio.h> #include <stdlib.h> #include ...

  3. linux嵌入式面试题合集,嵌入式linux面试题解析(一)——ARM部分二

    嵌入式linux面试题解析(一)--ARM部分二1.描述一下嵌入式基于ROM的运行方式基于RAM的运行方式有什么区别.基于RAM的运行方式:需要把硬盘和其他介质的代码先加载到ram中,加载过程中一般有 ...

  4. java 解析xls 文件_java简单解析xls文件的方法示例【读取和写入】

    本文实例讲述了java简单解析xls文件的方法.分享给大家供大家参考,具体如下: 读取: import java.io.*; import jxl.*; import jxl.write.*; imp ...

  5. linux内核深度解析_十年磨一剑,第一本龙芯平台的Linux内核书来了

    <用"芯"探核:基于龙芯的Linux内核探索解析>是一本基于龙芯平台,结合源代码来探索和解析Linux-5.x内核的书. 市面上解析Linux 内核的经典书籍已有不少, ...

  6. linux源码文件名,Linux中文件名解析处理源码分析

    Linux中文件名解析处理源码分析 前言 Linux中对一个文件进行操作的时候,一件很重要的事情是对文件名进行解析处理,并且找到对应文件的inode对象,然后创建表示文件的file对象.在此,对文件名 ...

  7. 嵌入式linux面试题解析(四)——逻辑推理一

    嵌入式linux面试题解析(四)--逻辑推理一 1.谁是罪犯问题 一位法官在审理一起盗窃案时,对涉及到的四名嫌疑犯A.B.C.D进行了审问.四人分别供述如下: A:"罪犯在B.C.D三人之中 ...

  8. 嵌入式linux面试题库,嵌入式linux面试题解析(二)——C语言部分三

    嵌入式linux面试题解析(二)--C语言部分三 1.下面的程序会出现什么结果#include#include #include void getmemory(char *p){p=(char *) ...

  9. linux++php无法解析,怎么解决linux php无法解析的问题

    linux php无法解析的解决办法:首先找到apache配置文件:然后在根目录下执行"#find / -name "httpd.conf"":最后添加内容为& ...

最新文章

  1. [转]数据库开发21条军规
  2. hdu3006 状态压缩+位运算+hash(小想法题)
  3. Codeforces 1491 D. Zookeeper and The Infinite Zoo (二进制处理)
  4. CentOS 6.5 初始值
  5. php7.2 加载pgsql驱动,PHP启动:无法加载动态库PGSQL - php
  6. Python安装、使用MySQL数据库
  7. mybatis大于小于的转义
  8. 关于如何控制一个页面的Ajax读数据只读一次的简单解决办法!
  9. 关于 bind 你可能需要了解的知识点以及使用场景
  10. 程序人生:不知道我讲了什么的回应稿
  11. 重磅:国刊4区变1区!2021年中科院分区表正式公布!
  12. 收据模板_使用智能收据简化支出报告
  13. Python抓取行政区域划分存入MySQL数据库
  14. python扫描二维码输出内容_通过python扫描二维码/条形码并打印数据
  15. java基础/接口与继承1(0.96万字)
  16. 无线WiFi安全渗透与攻防(一)之无线安全环境搭建
  17. css中的before与after
  18. 工业产品类计算机绘图师,全国计算机绘图师考试试题汇总.pdf
  19. Duolingo推出聊天学习机器人 让你免费学英语
  20. Flutter 音频转码Mp3文件插件

热门文章

  1. YOLOv4实用训练实践
  2. 噪声标签的负训练:ICCV2019论文解析
  3. 深度学习常见问题解析
  4. 2021年大数据ZooKeeper(六):ZooKeeper选举机制
  5. VIM配置攻略(最强干货加强版)
  6. php.ini Xdebug配置
  7. RxJava debounce()和throttleWithTimeout()
  8. Json 动态获取key 或者获取value
  9. 微软CRM 2011 新功能之三:可新增客户化活动类型实体
  10. spring 组件基于注解的注册方式