Linux ARM 平台 C 语言操作 Excel 文件的常用库与工具汇总(支持 xls 和 xlsx)
在 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 的结构,内部基于 pugiXML
和 miniz
实现。
该库设计现代、接口清晰,适合新项目使用。但由于使用 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 支持功能。
如环境允许,也可以通过 ssconvert
或 soffice
实现格式转换,快速完成数据的可视化导出。