当前位置: 首页 > news >正文

libxlsxwriter: 一个轻量级的跨平台的C++操作Excel的开源库

目录

1.简介

2.安装与配置

2.1.Windows平台

2.1.1.环境准备

2.1.2.编译 libxlsxwriter

2.1.3.常见问题处理

2.1.4.使用编译产物

2.2.Linux平台

2.2.1.环境准备

2.2.2.编译步骤(CMake 方式,推荐)

2.2.3.常见问题

3.核心功能

4.简单示例:创建 Excel 文件

5.注意事项

官方文档与资源


1.简介

   libxlsxwriter 是一个用于生成 Excel XLSX 文件的 C 语言库,支持丰富的格式化选项、公式、图表等功能,且无需依赖 Microsoft Excel 或其他外部库。

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

Wiki地址:https://libxlsxwriter.github.io/

        下面是 libxlsxwriter 的一些特点和功能:

1.轻量级:纯 C 语言实现,无需外部依赖。

2.跨平台:libxlsxwriter 可以在多个操作系统上工作,包括 Linux、macOS 和 Windows。

3.创建 XLSX 文档:它允许您创建 XLSX 格式的 Excel 文档,支持 Excel 2007 及更高版本。

4.功能丰富:libxlsxwriter 支持创建工作表、单元格、公式、图表、条件格式化、数据筛选等功能。

5.支持多种格式和样式:您可以设置单元格的格式、字体、颜色、边框、背景等属性,以及应用数值格式、日期格式、公式和函数等。

6.支持图表:libxlsxwriter 允许您创建各种 Excel 图表,如条形图、饼图、折线图等,并支持自定义图表的样式和属性。

7.高性能:该库被设计为具有高性能,在大型数据集的情况下生成速度快。

值得注意的是,libxlsxwriter 只能用于创建 XLSX 文件,不支持读取或修改现有的 Excel 文件。(可以通过c++自带的文件处理来读取,处理后的数据再手动导入到最后的表中)

2.安装与配置

2.1.Windows平台

2.1.1.环境准备

1.安装 Visual Studio

确保安装了 Visual Studio(2019/2022 等版本均可 ),保证有 C/C++ 编译工具链。

2.安装cmake

从 CMake 官网 下载 Windows 版本并安装,安装后把 CMake 的 bin 目录添加到系统环境变量 Path ,方便命令行调用。可参考下面的博客:

CMake实践:安装与配置-CSDN博客

3.准备 Zlib 库

libxlsxwriter 依赖 Zlib(压缩库 ),有两种处理方式:

方式 1:使用系统 / 预编译 Zlib

从 Zlib 官网 下载 Windows 版本(或用包管理器如 vcpkg 安装,vcpkg install zlib:x64-windows )。

方式 2:手动编译 Zlib

克隆 Zlib 源码(git clone https://github.com/madler/zlib ),或者手动下载源码包,我就是从下载的源码包:zlib131.zip, 用 CMake + VS 编译:

解压zlib131.zip,得到文件夹:zlib-1.3.1

新建build目录,进入build目录执行:

#1
cmake ..  -G "Visual Studio 17 2022"  -A x64#2
cmake --build  .  --config Release

在build目录下的Release文件夹中生成静态库和动态库:

 方式 3:VS2022编译 Zlib

当然你也可以打开build目录下的zlib.sln,用vs2022构建

操作比较简单,在这里就不赘述了。

2.1.2.编译 libxlsxwriter

1.获取 libxlsxwriter 源码

从 GitHub 仓库 克隆源码,或下载 zip 包解压:

git clone https://github.com/jmcnamara/libxlsxwriter.git
cd libxlsxwriter

2.用 CMake 生成 VS 项目文件

在 libxlsxwriter 目录下创建 build 文件夹,打开命令行(如 VS 的 “开发人员命令提示符” ),进入 build 目录,执行 CMake 命令:

mkdir build && cd build
# 基础命令(需确保 Zlib 能被找到)
cmake .. -G "Visual Studio 17 2022"  -A x64# 若 Zlib 未自动识别,手动指定路径(以手动编译 Zlib 为例)
cmake .. -G "Visual Studio 17 2022"  -A x64  \-DZLIB_LIBRARY="D:/OpenProject/zlib-1.3.1/build\Release/zlibstatic.lib" \-DZLIB_INCLUDE_DIR="D:/OpenProject/zlib-1.3.1"cmake --build  .  --config Release

  • -G "Visual Studio 17 2022":指定生成 VS 2022 的项目文件,根据实际 VS 版本调整(如 VS 2019 对应 Visual Studio 16 2019 )。
  • -A x64:指定编译为 64 位,若需 32 位则用 -A Win32 。
  • 若用 vcpkg 安装 Zlib,可添加 -DCMAKE_TOOLCHAIN_FILE=[vcpkg路径]/scripts/buildsystems/vcpkg.cmake ,让 CMake 自动找到依赖。

在执行:cmake --build  .  --config Release, 报错:

然后到zlib的根目录zlib-1.3.1:

发现真的没有zconf.h文件,然后直接把zconf.h.in备份,改为zconf.h,再执行命令编译,在build的Release目录下生成了静态库xlsxwriter.lib

3.用 Visual Studio 编译

CMake 执行成功后,build 目录会生成 xlsxwriter.sln 解决方案文件。双击打开,选择 Release 或 Debug 配置(一般选 Release 用于生产 ),右键解决方案 → 生成,即可编译出 libxlsxwriter 的库文件(如 xlsxwriter.lib 静态库 )。

2.1.3.常见问题处理

1.“找不到 Zlib” 错误

若 CMake 报错 Could NOT find ZLIB,检查:

  • Zlib 路径是否正确(手动指定 -DZLIB_ROOT 等参数 )。
  • 若用 vcpkg,确保已正确安装 zlib:x64-windows 且 CMake 命令包含 vcpkg 工具链。

2.编译后缺少 DLL(动态库场景 )

若需动态库(xlsxwriter.dll ),确认编译时启用了动态库选项(libxlsxwriter 默认编译静态库,可修改 CMakeLists.txt 或通过 -DBUILD_SHARED_LIBS=ON 开启 )。

3.VS 编译报错 “无法打开文件 zlibstatic.lib”

检查 Zlib 库路径是否正确,确保 zlibstatic.lib 存在且路径在 VS 项目的库目录中。

2.1.4.使用编译产物

编译完成后,build 目录的 Release(或 Debug )文件夹下会有:

  • xlsxwriter.lib:静态库文件(若编译静态库 )。
  • xlsxwriter.dll + xlsxwriter.lib:动态库文件(若编译动态库 )。
  • 头文件:需把 libxlsxwriter/include 目录下的 xlsxwriter.h 等头文件引入项目。

在自己的 C/C++ 项目中,需:

  1. 添加 include 目录到编译器的 “附加包含目录”。
  2. 添加 xlsxwriter.lib(或 xlsxwriter.dll + 导入库 )到链接器的 “附加依赖项”。
  3. 若用动态库,确保运行时 xlsxwriter.dll 在可执行文件目录或系统路径中。

2.2.Linux平台

2.2.1.环境准备

1.安装基础编译工具

以麒麟V10桌面版本为例,打开终端,执行命令安装编译依赖(确保系统联网):

sudo apt update
sudo apt install build-essential git cmake zlib1g-dev
  • build-essential:包含 GCC、Make 等基础编译工具。
  • git:用于克隆源码(也可手动下载)。
  • cmake:构建项目的工具(libxlsxwriter推荐用 CMake)。
  • zlib1g-devlibxlsxwriter依赖的压缩库开发包。

如果不能联网, 手动安装cmake可参考:

CMake实践:安装与配置-CSDN博客

手动安装zlib,可参考2.1.1章节的 准备Zlib库 部分。

2.获取libxlsxwriter源码

通过git克隆官方仓库(或官网下载源码包解压):

git clone https://github.com/jmcnamara/libxlsxwriter.git
cd libxlsxwriter

2.2.2.编译步骤(CMake 方式,推荐)

1.创建构建目录

libxlsxwriter源码根目录,创建build文件夹并进入:

mkdir build && cd build

2.CMake 配置

执行cmake生成 Makefile(可添加参数自定义编译,如指定安装路径):

cmake .. 
# 若需指定安装路径(如/usr/local),可加参数:
# cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local

若依赖的zlib未被识别,可手动指定路径(一般系统已装则无需额外操作),例如:

cmake .. -DZLIB_INCLUDE_DIR=/usr/include/zlib -DZLIB_LIBRARY=/usr/lib/x86_64-linux-gnu/libz.so

 3.编译与安装

编译(-j后跟 CPU 核心数,加速编译):

make -j$(nproc)  

编译完成后,安装到系统(需管理员权限):

sudo make install  

4.验证编译结果

检查库文件,安装后,/usr/local/lib(或自定义路径)下会有libxlsxwriter.so(动态库)、libxlsxwriter.a(静态库);/usr/local/include下有xlsxwriter.h等头文件。

2.2.3.常见问题

1.“找不到 zlib” 错误

确保已安装zlib1g-dev,若仍报错,检查cmake参数是否正确指定ZLIB_ROOTZLIB_LIBRARY路径(参考步2.2.2第 2 点)。

2.编译后运行程序提示 “找不到库”

若运行时出现error while loading shared libraries: libxlsxwriter.so.xxx,执行:

sudo ldconfig  # 更新系统库缓存

或在编译时手动指定rpath(硬编码库路径):

gcc test.c -o test -lxlsxwriter -Wl,-rpath=/usr/local/lib  

Qt .pro配置gcc相关命令(三):-W1、-L、-rpath和-rpath-link-CSDN博客

3.核心功能

1.单元格格式化

// 创建格式对象
lxw_format *format = workbook_add_format(workbook);
format_set_font_name(format, "Arial");
format_set_font_size(format, 12);
format_set_bold(format);
format_set_align(format, LXW_ALIGN_CENTER);
format_set_bg_color(format, LXW_COLOR_BLUE);// 应用格式
worksheet_write_string(worksheet, 0, 0, "Formatted Text", format);

2.图表生成

// 创建图表对象
lxw_chart *chart = workbook_add_chart(workbook, LXW_CHART_COLUMN);// 添加数据系列
chart_add_series(chart, "=Sheet1!$A$1:$A$10");// 设置图表标题和轴标签
chart_set_title(chart, "Title", NULL);
chart_set_x_axis(chart, "X Axis", NULL);
chart_set_y_axis(chart, "Y Axis", NULL);// 将图表插入工作表
worksheet_insert_chart(worksheet, 5, 0, chart);

3.公式支持

// 写入简单公式
worksheet_write_formula(worksheet, 0, 1, "=SUM(A1:A10)", NULL);// 写入带命名范围的公式
worksheet_write_formula(worksheet, 1, 1, "=AVERAGE(Sales)", NULL);

4.简单示例:创建 Excel 文件

以下是一个用 libxlsxwriter 创建简单 Excel 文件的 C 语言示例:

#include "xlsxwriter.h"int main() {// 创建工作簿和工作表lxw_workbook  *workbook  = workbook_new("example.xlsx");lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);// 设置单元格格式lxw_format *format = workbook_add_format(workbook);format_set_bold(format);format_set_bg_color(format, LXW_COLOR_YELLOW);// 写入数据worksheet_write_string(worksheet, 0, 0, "Hello", NULL);worksheet_write_string(worksheet, 0, 1, "World!", format);worksheet_write_number(worksheet, 1, 0, 123, NULL);worksheet_write_formula(worksheet, 1, 1, "=A2*2", NULL);// 关闭工作簿return workbook_close(workbook);
}

编译和运行:

gcc example.c -o example -lxlsxwriter
./example

5.注意事项

1)仅支持写入libxlsxwriter 只能创建新文件,不能读取或修改现有 Excel 文件。

2)内存管理:无需手动释放格式、图表等对象,调用 workbook_close() 会自动清理。

3)错误处理:大多数函数返回错误码(0 表示成功),建议检查返回值。

如果需要读取或修改现有 Excel 文件,可以考虑使用其他库(如 libxl 或 libxls)。

官方文档与资源

  • GitHub 仓库:https://github.com/jmcnamara/libxlsxwriter
  • 官方文档:libxlsxwriter: Creating Excel files with C and libxlsxwriter
  • API 参考:https://libxlsxwriter.github.io/api_reference.html
http://www.lryc.cn/news/576497.html

相关文章:

  • 【HarmonyOS NEXT】跳转到华为应用市场进行应用下载并更新
  • COLT_CMDB_linux_zookeeperInfo_20250628.sh
  • cocos creator 3.8 - 精品源码 -《文字大师》(移一笔变新字)
  • Insar 相位展开真实的数据集的生成与下载(随机矩阵放大,zernike 仿真包裹相位)
  • Cesium快速入门到精通系列教程十一:Cesium1.74中高性能渲染上万Polyline
  • SLAM中的非线性优化-2D图优化之零空间(十五)
  • 变长字节的数字表示法vb224
  • 互联网大厂Java求职面试实录
  • c# sugersql 获取子表数据排序
  • Java 识别和处理 HTML 标签内容
  • Spring MVC参数解析:深入剖析415异常与@RequestBody处理机制问题场景
  • Flutter基础(FFI)
  • pytorch中的几个概念
  • NLP中的同义词替换及我踩的坑
  • 《Python 实现 B 站视频信息爬虫:从批量获取到 CSV 保存》
  • 数字孪生技术引领UI前端设计新革命:实时交互与模拟预测
  • LINUX628 NFS 多web;主从dns;ntp;samba
  • 鸿蒙5:ArkTS基本介绍
  • VR训练美国服务器:高性能解决方案与优化指南
  • 【LeetCode 热题 100】438. 找到字符串中所有字母异位词——(解法三)不定长滑动窗口+数组
  • 构建 AI 系统的 4 大 Agentic AI 设计模式
  • 网关ARP防护的措施
  • qt和qtcreator版本关系
  • n8n-nodes-puppeteer截图中文变方块乱码解决方法
  • 在单片机中如何实现一个shell控制台
  • Launcher3中的CellLayout 和ShortcutAndWidgetContainer 的联系和各自职责
  • 前端react面试题之实现网页多选搜索框
  • 【学习笔记】深入理解Java虚拟机学习笔记——第12章 Java内存模型与线程
  • python中学物理实验模拟:瞬间推力与摩擦力作用下的物体运动
  • 力扣网C语言编程题:在数组中查找目标值位置之二分查找法