目录
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++ 的桌面开发” workload,保证有 C/C++ 编译工具链。
2.安装cmake
从 CMake 官网 下载 Windows 版本并安装,安装后把 CMake 的 bin
目录添加到系统环境变量 Path
,方便命令行调用。可参考下面的博客:
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++ 项目中,需:
- 添加
include
目录到编译器的 “附加包含目录”。 - 添加
xlsxwriter.lib
(或xlsxwriter.dll
+ 导入库 )到链接器的 “附加依赖项”。 - 若用动态库,确保运行时
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-dev
:libxlsxwriter
依赖的压缩库开发包。
如果不能联网, 手动安装cmake可参考:
手动安装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_ROOT
、ZLIB_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
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
)。