在 Linux 或嵌入式 ARM 平台开发中,使用 C 语言操作 Excel 文件是一项常见需求,特别是在工业设备数据采集、日志导出、报表生成等场景。Excel 文件格式复杂,手工解析成本高,因此使用现成的库可以极大简化开发工作。

本文整理了若干支持 .xls.xlsx 格式的 C/C++ 库及工具,包括:

  • libxls
  • libxlsxwriter
  • xlsxio
  • libxl
  • ezxlsx
  • OpenXLSX
  • libods / ods-c
  • ssconvert(Gnumeric 工具)
  • LibreOffice CLI(soffice)
    均可在 Linux ARM 环境下使用,适用于树莓派、全志、RK3568、STM32MP1 等平台。

libxls:读取 xls 格式的轻量 C 库

libxls 是专为解析 Excel 97-2003(.xls 格式)设计的 C 语言库。它只支持读取功能,不支持写入。该库体积小巧,零外部依赖,适合嵌入式设备。

支持的平台包括 x86、ARM 等多种架构,已经被广泛用于各类轻量项目中。

GitHub 地址:https://github.com/libxls/libxls

安装示例:

git clone https://github.com/libxls/libxls.git
cd libxls
mkdir build && cd build
cmake ..
make && sudo make install

libxlsxwriter:功能完整的 xlsx 写入库

libxlsxwriter 是一款专门用于生成 .xlsx 文件的开源 C 库,支持 Excel 2007 及以上版本格式。该库由 John McNamara 开发,功能包括单元格格式设置、图表绘制、图像插入、合并单元格等。

不支持读取 .xlsx 文件,专注于写入性能和兼容性,代码风格清晰,适合工业项目中用于日志和数据输出。

项目地址:https://github.com/jmcnamara/libxlsxwriter

编译方式如下:

git clone https://github.com/jmcnamara/libxlsxwriter.git
cd libxlsxwriter
make && sudo make install

xlsxio:轻量级的 xlsx 读取与写入库

xlsxio 支持读取和写入 .xlsx 文件,适用于资源受限的嵌入式系统。其最大特点是支持“流式读取”,可以处理超大 Excel 文件而不会消耗大量内存。

库的实现基于 libzip 和 libexpat,依赖相对简单,构建过程清晰,适合直接集成到已有项目中。

GitHub 地址:https://github.com/brechtsanders/xlsxio

安装步骤:

git clone https://github.com/brechtsanders/xlsxio.git
cd xlsxio
mkdir build && cd build
cmake ..
make && sudo make install

libxl:商业授权的高性能 Excel 库

libxl 是一款闭源商业库,提供完整的 .xls.xlsx 文件读写支持,涵盖格式设置、图表、公式、图像等高级功能。该库对性能和兼容性优化良好,支持 C、C++、Delphi 等语言。

libxl 提供 Linux ARM 的 SDK,适用于需要完整 Excel 功能支持的工业系统。虽然需授权,但其功能远超一般开源库。

官方网址:https://www.libxl.com/

ezxlsx:极简实现的 xlsx 写入库

ezxlsx 是一个用 C 编写的极简 .xlsx 文件生成器,适合用于快速写出简单 Excel 文件,结构清晰,便于嵌入式项目进行定制。

它没有额外依赖,生成的文件可以直接被 Excel 打开。适合对性能和控制有极高要求的场景。

GitHub 项目地址:https://github.com/sheredom/ezxlsx

OpenXLSX:现代 C++17 编写的 xlsx 库

OpenXLSX 是一款现代化的 C++17 库,用于处理 .xlsx 文件,支持读取和写入。使用面向对象的接口封装了 Excel 的结构,内部基于 pugiXMLminiz 实现。

该库设计现代、接口清晰,适合新项目使用。但由于使用 C++17,嵌入式项目需确认编译器是否支持相应特性。

GitHub 地址:https://github.com/troldal/OpenXLSX

libods / ods-c:使用 OpenDocument 表格格式的替代方案

libods 是用于创建 .ods(OpenDocument Spreadsheet)文件的 C 语言库,该格式可被 Excel 直接打开,并与 LibreOffice、WPS 等兼容。

虽然不是 Excel 专属格式,但在部分项目中可作为轻量替代方案使用。适用于纯文本数据导出、工业日志归档等用途。

ssconvert:Gnumeric 提供的命令行工具

ssconvert 是 Gnumeric 表格软件的命令行工具,支持 .csv.xls.xlsx 的互相转换。C 程序可通过 system() 调用该命令实现格式转换。

适用于快速构建文本数据到 Excel 的转换流程,前提是运行环境中已安装 gnumeric

安装命令:

sudo apt install gnumeric

使用示例:

ssconvert data.csv result.xlsx

LibreOffice CLI:soffice 转换命令

LibreOffice 提供的 soffice 命令支持将文本、ODS、CSV 等文件批量转换为 .xls.xlsx 格式。该工具适合在 GUI 不可用的嵌入式系统中通过命令行使用。

可通过如下方式执行转换:

soffice --headless --convert-to xlsx filename.csv

LibreOffice CLI 安装包较大,不适合极小型系统,但适用于带存储空间的 ARM Linux 系统(如树莓派)。

结语

在 Linux ARM 嵌入式系统中,处理 Excel 文件时应结合实际需求和系统资源状况选择合适的方案。

当仅需读取旧格式 .xls 文件时,libxls 是轻量且实用的选择。

如需写入格式丰富的 .xlsx 文件,libxlsxwriter 功能完备且成熟稳定。

若需同时读取与写入 .xlsx,并支持流式处理,xlsxio 是理想的开源方案。

对 Excel 功能要求极高(如图表、公式、图像),可使用商业库 libxl,适合工业项目和商业产品。

对于极简场景,ezxlsx 提供极低依赖的 .xlsx 写入能力。OpenXLSX 则适合在现代 C++ 项目中嵌入 Excel 支持功能。

如环境允许,也可以通过 ssconvertsoffice 实现格式转换,快速完成数据的可视化导出。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/91278.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/91278.shtml
英文地址,请注明出处:http://en.pswp.cn/web/91278.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Apache Ignite 集群标识(Cluster ID)和集群标签(Cluster Tag)

这是一个关于 Apache Ignite 集群标识(Cluster ID)和集群标签(Cluster Tag) 的重要配置概念。我们来一步步深入理解这段文档的含义,并结合实际场景说明其用途。🧩 一、核心概念:Cluster ID 与 C…

基于 Hadoop 生态圈的数据仓库实践 —— OLAP 与数据可视化(三)

目录 三、Impala OLAP 实例 1. 建立 olap 库、表、视图 2. 初始装载数据 3. 修改销售订单定期装载脚本 4. 定义 OLAP 需求 5. 执行 OLAP 查询 三、Impala OLAP 实例 本节使用前面销售订单的例子说明如何使用 Impala 做 OLAP 类型的查询,以及实际遇到的问题及解…

如何不让android studio自动换行

一、关闭逗号后自动换行设置 打开设置界面 进入 File → Settings (Windows/Linux)或 Preferences (macOS)。 导航至 Editor → Code Style → 选择语言(如 Java 或 Kotlin )。 二、修改换行规则…

Jenkinsfile 报错

Started by user 六件套Obtained Jenkinsfile from git https://gitee.com/duoshuijiao/vitepress-jenkins-cicd-demoorg.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:WorkflowScript: 28: Expected a step line 28, column 66.fingerprint:…

工业一体机全封闭抗干扰赋能自动化产线高效作业

在自动化产线智能设备等工业场景中,工业一体机的应用面临多重挑战:高温、粉尘、电磁干扰等恶劣环境易导致设备误操作,传统工控机平均无故障时间不足4000小时;封闭车间散热效率低下,风扇散热失效风险增加,产…

鸿蒙NEXT开发笔记(二十八)仿抖音快手App的把位图数据转存为图片

上一节我们利用Scroller实现了列表项的自动滚动功能,对于图像列表来说,被选做封面的图像需要保存为图片文件,以便向服务器上传封面图片。 由于avImageGenerator从视频提取的图像帧数据为image.PixelMap(位图格式)&…

四、搭建springCloudAlibaba2021.1版本分布式微服务-加入openFeign远程调用和sentinel流量控制

OpenFeign远程调用 1、OpenFeign OpenFeign是一种声明式、模板化的HTTP客户端。在Spring Cloud中使用OpenFeign,可以做到使用HTTP请求访问远程服务,就像调用本地方法一样的,开发者完全感知不到这是在调用远程方法,更感知不到在访问…

网络安全威胁——APT攻击_apt攻击预测案例

APT攻击 1. 基本概念2. APT的攻击阶段3. APT的典型案例参考 1. 基本概念 高级持续性威胁(APT,Advanced Persistent Threat),又叫高级长期威胁,是一种复杂的、持续的网络攻击,包含高级、长期、威胁三个要…

顺时针旋转N * N 的矩阵

顺时针旋转题目描述数据范围实现逻辑代码实现题目描述 有一个NxN整数矩阵&#xff0c;请编写一个算法&#xff0c;将矩阵顺时针旋转90度。给定一个NxN的矩阵&#xff0c;和矩阵的阶数N,请返回旋转后的NxN矩阵。数据范围 0<n<300&#xff0c;矩阵中的值满足 0≤val≤100…

原生C++实现信号与槽机制:原理详解

信号与槽机制是一种广泛应用于事件驱动系统和GUI框架&#xff08;如Qt&#xff09;的设计模式。它允许组件之间通过订阅-发布模式进行通信&#xff0c;从而实现松耦合的设计。本文将详细讲解如何在原生C中从零开始实现信号与槽机制&#xff0c;并深入探讨其工作原理。一、信号与…

【人工智能】OpenAI的AI代理革命:通向超拟人交互的未来之路

人工智能代理(AI Agent)正引领一场深刻的技术变革,其核心在于赋予AI系统感知、规划、行动和学习的能力,以自主完成复杂任务。OpenAI作为这一领域的先驱,通过其大型语言模型(LLMs)如GPT系列,极大地推动了AI代理的发展,使其在自然语言理解、生成和工具使用方面达到了前所…

Ubuntu虚拟机介绍、命令、安装软件指令(一)

Ubuntu介绍 Ubuntu 是一个基于 Debian 的开源 Linux 操作系统&#xff0c;由 Canonical 公司赞助开发。它是目前全球最流行的 Linux 发行版之一&#xff0c;以其用户友好性、稳定性和强大的社区支持著称。 核心特性 1.免费开源 完全免费使用和分发&#xff0c;遵循 GNU GPL…

企业微信服务商创建第三方应用配置数据回调url和指令回调url的java代码实现

关键区别说明&#xff08;指令回调 vs 数据回调&#xff09;特性指令回调数据回调触发场景授权/取消授权等管理事件通讯录变更、应用菜单点击等业务事件关键字段InfoTypeEvent ChangeType典型事件suite_auth, cancel_authchange_contact, suite_ticket响应要求必须返回加密的&…

LazyLLM教程 | 第2讲:10分钟上手一个最小可用RAG系统

贴心小梗概本文将介绍使用LazyLLM搭建最基础的RAG的流程。首先介绍使用LazyLLM搭建RAG系统的必要环境配置&#xff0c;然后简单回顾RAG的基本流程&#xff0c;接下来分别介绍RAG中文档加载、检索组件、生成组件三个关键部分的参数和基本使用方法&#xff0c;最后利用LazyLLM实现…

android9-PMS-常见问题及分析步骤

以下是基于 Android 9 的 Package Manager Service (PMS) 常见问题及分析步骤&#xff0c;结合系统原理与优化实践整理&#xff1a; &#x1f527; 一、开机性能问题 现象 开机时间随应用增多显著延长&#xff0c;卡在“正在启动应用”阶段。 分析步骤 ① 确认扫描阶段耗时adb…

生成模型实战 | GLOW详解与实现

生成模型实战 | GLOW详解与实现0. 前言1. 归一化流模型1.1 归一化流与变换公式1.2 RealNVP 的通道翻转2. GLOW 架构2.1 ActNorm2.2 可逆 11 卷积2.3 仿射耦合层2.4 多尺度架构3. 使用 PyTorch 实现 GLOW3.1 数据处理3.2 模型构建3.3 模型训练0. 前言 GLOW (Generative Flow) 是…

行业案例:杰和科技为智慧教育构建数字化硬件底座

清晨8点10分&#xff0c;深圳某学生踏入校园&#xff0c;智慧门闸识别身份&#xff0c;并同步发给家长&#xff1b;走廊里的“智慧班牌”向他们展示今日的课表&#xff1b;课堂上&#xff0c;教室前方的多媒体播放器里&#xff0c;老师引导学生学习“居民楼消防隐患”知识&…

Redis与MySQL数据同步:从“双写一致性”到实战方案

Redis与MySQL数据同步&#xff1a;从“双写一致性”到实战方案 在分布式系统中&#xff0c;Redis作为高性能缓存被广泛使用——它能将热点数据从MySQL中“搬运”到内存&#xff0c;大幅降低数据库压力、提升接口响应速度。但随之而来的核心问题是&#xff1a;当MySQL数据更新时…

Java源码构建智能名片小程序

在移动互联网时代&#xff0c;纸质名片的局限性日益凸显——信息更新不便、客户管理困难、营销效果难以追踪。智能电子名片小程序以其便捷、高效、智能的特点&#xff0c;正成为商务人士的"数字营销门户"。而基于Java技术栈开发的智能名片系统&#xff0c;凭借其稳定…

如何在短时间内显著提升3D效果图渲染速度?

在建筑设计、游戏开发、影视制作等行业&#xff0c;3D效果图的渲染速度是项目进度与效率的关键瓶颈。面对复杂场景时&#xff0c;漫长的渲染等待尤为突出。要在保证质量的前提下大幅缩短渲染时间&#xff0c;以下优化策略至关重要&#xff1a; 1. 升级硬件配置&#xff1a;渲染…