在 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
實現格式轉換,快速完成數據的可視化導出。