XLS文件解析库-libxls介绍

2024-09-04 22:44
文章标签 介绍 解析 xls libxls

本文主要是介绍XLS文件解析库-libxls介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.XLS文件介绍

XLS文件格式是Microsoft Excel早期版本使用的电子表格文件格式。它是由微软为其桌面应用程序Microsoft Excel设计的一种专有文件格式。
XLS:最初在1993年与Excel 4.0一起推出,后来在Excel 5.0至Excel 2003的各个版本中得到了进一步的发展。
由于项目需要,需要解析XLS格式的文件,新的开源库有的是不支持解析XLS文件的,主要是支持xlsl的文件。

2.配置环境

下载地址:https://github.com/libxls/libxls
特点:这是libxls,一个用于读取旧二进制OLE格式Excel文件的C库,还有一个用于将XLS转换为CSV的命令行工具(恰如其分地命名为xls2csv)、跨平台。

使用:我这里直接将源码引用到我的工程中。
在这里插入图片描述
这里为了方便,还专门提供了C++接口。
在这里插入图片描述

3.使用

C语言使用如下所示。

xls_error_t error = LIBXLS_OK;
xlsWorkBook *wb = xls_open_file("/path/to/finances.xls", "UTF-8", &error);
if (wb == NULL) {printf("Error reading file: %s\n", xls_getError(error));exit(1);
}
for (int i=0; i<wb->sheets.count; i++) { // sheetsxlsWorkSheet *work_sheet = xls_getWorkSheet(work_book, i);error = xls_parseWorkSheet(work_sheet);for (int j=0; j<=work_sheet->rows.lastrow; j++) { // rowsxlsRow *row = xls_row(work_sheet, j);for (int k=0; k<=work_sheet->rows.lastcol; k++) { // columnsxlsCell *cell = &row->cells.cell[k];// do something with cellif (cell->id == XLS_RECORD_BLANK) {// do something with a blank cell} else if (cell->id == XLS_RECORD_NUMBER) {// use cell->d, a double-precision number} else if (cell->id == XLS_RECORD_FORMULA) {if (strcmp(cell->str, "bool") == 0) {// its boolean, and test cell->d > 0.0 for true} else if (strcmp(cell->str, "error") == 0) {// formula is in error} else {// cell->str is valid as the result of a string formula.}} else if (cell->str != NULL) {// cell->str contains a string value}}}xls_close_WS(work_sheet);
}
xls_close_WB(wb);

C++使用如下所示:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cctype>
#include <cassert>#include "XlsReader.h"using namespace xls;
using namespace std;int main(int argc, char *argv[])
{if(argc < 2) {printf("Usage: test_cpp <file.xls>\n");exit(1);}string s = string(argv[1]);WorkBook foo(s);cellContent cell = foo.GetCell(0, 1, 2);foo.ShowCell(cell);for(int sheetNum = 0; sheetNum < foo.GetSheetCount(); ++sheetNum) {if(sheetNum) printf("\n\n");printf("===>>> SheetName: %s\n\n", foo.GetSheetName(sheetNum).c_str());foo.InitIterator(sheetNum);while(true) {cellContent c = foo.GetNextCell();if(c.type == cellBlank) break;foo.ShowCell(c);}}
}

这篇关于XLS文件解析库-libxls介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1137247

相关文章

Java的volatile和sychronized底层实现原理解析

《Java的volatile和sychronized底层实现原理解析》文章详细介绍了Java中的synchronized和volatile关键字的底层实现原理,包括字节码层面、JVM层面的实现细节,以... 目录1. 概览2. Synchronized2.1 字节码层面2.2 JVM层面2.2.1 ente

JAVA SE包装类和泛型详细介绍及说明方法

《JAVASE包装类和泛型详细介绍及说明方法》:本文主要介绍JAVASE包装类和泛型的相关资料,包括基本数据类型与包装类的对应关系,以及装箱和拆箱的概念,并重点讲解了自动装箱和自动拆箱的机制,文... 目录1. 包装类1.1 基本数据类型和对应的包装类1.2 装箱和拆箱1.3 自动装箱和自动拆箱2. 泛型2

Redis 内存淘汰策略深度解析(最新推荐)

《Redis内存淘汰策略深度解析(最新推荐)》本文详细探讨了Redis的内存淘汰策略、实现原理、适用场景及最佳实践,介绍了八种内存淘汰策略,包括noeviction、LRU、LFU、TTL、Rand... 目录一、 内存淘汰策略概述二、内存淘汰策略详解2.1 ​noeviction(不淘汰)​2.2 ​LR

IDEA与JDK、Maven安装配置完整步骤解析

《IDEA与JDK、Maven安装配置完整步骤解析》:本文主要介绍如何安装和配置IDE(IntelliJIDEA),包括IDE的安装步骤、JDK的下载与配置、Maven的安装与配置,以及如何在I... 目录1. IDE安装步骤2.配置操作步骤3. JDK配置下载JDK配置JDK环境变量4. Maven配置下

Python中配置文件的全面解析与使用

《Python中配置文件的全面解析与使用》在Python开发中,配置文件扮演着举足轻重的角色,它们允许开发者在不修改代码的情况下调整应用程序的行为,下面我们就来看看常见Python配置文件格式的使用吧... 目录一、INI配置文件二、YAML配置文件三、jsON配置文件四、TOML配置文件五、XML配置文件

Spring中@Lazy注解的使用技巧与实例解析

《Spring中@Lazy注解的使用技巧与实例解析》@Lazy注解在Spring框架中用于延迟Bean的初始化,优化应用启动性能,它不仅适用于@Bean和@Component,还可以用于注入点,通过将... 目录一、@Lazy注解的作用(一)延迟Bean的初始化(二)与@Autowired结合使用二、实例解

C语言中自动与强制转换全解析

《C语言中自动与强制转换全解析》在编写C程序时,类型转换是确保数据正确性和一致性的关键环节,无论是隐式转换还是显式转换,都各有特点和应用场景,本文将详细探讨C语言中的类型转换机制,帮助您更好地理解并在... 目录类型转换的重要性自动类型转换(隐式转换)强制类型转换(显式转换)常见错误与注意事项总结与建议类型

MySQL 缓存机制与架构解析(最新推荐)

《MySQL缓存机制与架构解析(最新推荐)》本文详细介绍了MySQL的缓存机制和整体架构,包括一级缓存(InnoDBBufferPool)和二级缓存(QueryCache),文章还探讨了SQL... 目录一、mysql缓存机制概述二、MySQL整体架构三、SQL查询执行全流程四、MySQL 8.0为何移除查

在Rust中要用Struct和Enum组织数据的原因解析

《在Rust中要用Struct和Enum组织数据的原因解析》在Rust中,Struct和Enum是组织数据的核心工具,Struct用于将相关字段封装为单一实体,便于管理和扩展,Enum用于明确定义所有... 目录为什么在Rust中要用Struct和Enum组织数据?一、使用struct组织数据:将相关字段绑

使用Java实现一个解析CURL脚本小工具

《使用Java实现一个解析CURL脚本小工具》文章介绍了如何使用Java实现一个解析CURL脚本的工具,该工具可以将CURL脚本中的Header解析为KVMap结构,获取URL路径、请求类型,解析UR... 目录使用示例实现原理具体实现CurlParserUtilCurlEntityICurlHandler