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 的結構,內部基于 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;渲染…