一、OpenXLSX 是什么?
OpenXLSX 是一个 C++ 库,用于读取、写入、创建和修改 Microsoft Excel文件(.xlsx 格式)。
📦 GitHub:https://github.com/troldal/OpenXLSX
🧩 支持平台:Windows / Linux / macOS
🧠 语言标准:C++17
📁 文件格式:Microsoft Office EXCEL(.xlsx)
二、为什么选择 OpenXLSX?
在实际项目里,当你需要在 C++ 中生成报表、导出数据、读取配置表格时,OpenXLSX是一个不错的选择:
-
极简依赖
自带 pugixml,头文件 + 静态库即可工作,编译简单。 -
C++17 现代化风格
API接口设计简洁直观,上手速度快。 -
跨平台
使用 CMake 构建系统,一份代码可同时运行在 Windows、Linux 和 macOS 上。 -
活跃维护,文档清晰
GitHub 仓库 持续更新,提供示例与接口文档。
三、编译与安装(Windows + Visual Studio 示例)
以下步骤基于 Windows 环境,使用 Visual Studio 2019 生成器。若使用其他平台或 IDE,只需调整 CMake 的 -G 和 -A 参数即可。
3.1 源码准备
git clone https://github.com/troldal/OpenXLSX.git
cd OpenXLSX
3.2 配置工程
我们选择 D:/OpenXLSX-x64 作为安装目录,并为 Debug 版本添加后缀 d,避免同名库覆盖。
- x86 平台
cmake -S . -B build_x86 -DCMAKE_INSTALL_PREFIX="D:/OpenXLSX-x86" -G "Visual Studio 16 2019" -A Win32 -DCMAKE_DEBUG_POSTFIX="d"
- x64 平台
cmake -S . -B build_x64 -DCMAKE_INSTALL_PREFIX="D:/OpenXLSX-x64" -G "Visual Studio 16 2019" -A x64 -DCMAKE_DEBUG_POSTFIX="d"
说明:
-S . 指定源码目录为当前路径,-B build_xxx 指定构建目录,-A 为目标平台架构,-DCMAKE_DEBUG_POSTFIX="d" 会在 Debug 库名字后加上 d,方便区分。
3.3 编译
# Debug 模式
cmake --build build_x64 --config Debug -j 8
# Release 模式
cmake --build build_x64 --config Release -j 8
3.4 安装
将编译产物(头文件、库、CMake 配置文件)安装到 D:/OpenXLSX-x64:
# 安装 Debug 版本
cmake --install build_x64 --config Debug
# 安装 Release 版本
cmake --install build_x64 --config Release
安装后的典型目录结构为:
D:/OpenXLSX-x64/
├── include/OpenXLSX/ # 头文件
├── lib/ # 静态库/动态库
└── lib/cmake/OpenXLSX/ # CMake find 配置
四、在项目中使用 OpenXLSX
4.1 测试项目结构
TestOpenXLSX/
├── CMakeLists.txt
└── src/
└── TestOpenXLSX.cpp
4.2 编写 CMakeLists.txt
我们将 OpenXLSX 的 CMake 配置路径设置为 C:/package/OpenXLSX-x64/lib/cmake/OpenXLSX,实际使用时请替换为你自己的安装位置。
cmake_minimum_required(VERSION 3.25)
project(TestOpenXLSX
VERSION 1.0.0
LANGUAGES CXX
)
set(PACKAGE_PATH "C:/package")
# ============================================================================
# Example app configuration
# ============================================================================
add_executable(${PROJECT_NAME} src/TestOpenXLSX.cpp)
# Find dependency OpenXLSX
set(OpenXLSX_DIR "${PACKAGE_PATH}/OpenXLSX-x64/lib/cmake/OpenXLSX")
find_package(OpenXLSX CONFIG REQUIRED)
if(OpenXLSX_FOUND)
message( NOTICE "FOUND OpenXLSX" )
get_target_property(OpenXLSX_INCLUDES OpenXLSX::OpenXLSX INTERFACE_INCLUDE_DIRECTORIES)
message( NOTICE "OpenXLSX_INCLUDES is ${OpenXLSX_INCLUDES}" )
else()
message( FATAL_ERROR "MISSING DEPENDENCY OpenXLSX" )
endif()
# Configure linkage for ${PROJECT_NAME}
target_link_libraries(${PROJECT_NAME} PRIVATE OpenXLSX::OpenXLSX)
target_include_directories(${PROJECT_NAME} PRIVATE ${OpenXLSX_INCLUDES})
target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_17)
# Ensure configuration of install RPATH for ${PROJECT_NAME}
set_target_properties(${PROJECT_NAME} PROPERTIES
INSTALL_RPATH_USE_LINK_PATH TRUE
)
# Installation steps for ${PROJECT_NAME}
install(TARGETS ${PROJECT_NAME}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
COMPONENT Runtime
)
4.3 编写示例代码
下面这段代码演示了:创建一个 Excel 文档,写入不同类型的数据(浮点数、整数、字符串、布尔值),并以覆盖方式保存。
#include "OpenXLSX.hpp"
void WriteExcel(const std::string& filename) {
// 创建 Excel 文档(如果文件已存在则覆盖)
OpenXLSX::XLDocument doc;
doc.create(filename, OpenXLSX::XLForceOverwrite);
auto workbook = doc.workbook();
auto sheet = workbook.worksheet("Sheet1");
sheet.cell("A1").value() = 3.14159265358979323846; // 浮点数
sheet.cell("B1").value() = 42; // 整数
sheet.cell("C1").value() = " Hello OpenXLSX! "; // 字符串
sheet.cell("D1").value() = true; // 布尔值
// 保存并关闭文件
doc.save();
doc.close();
}
int main() {
WriteExcel("demo.xlsx");
return 0;
}
4.4 编译运行
进入项目根目录,依次执行:
# 配置
cmake -S . -B build
# 编译(选择 Debug 或 Release)
cmake --build build --config Debug
cmake --build build --config Release
运行生成的可执行文件,即可在程序目录下获得 demo.xlsx 文件,用 Excel 打开后将看到:
A B C D
3.14159265358979 42 Hello OpenXLSX! TRUE
五、总结
OpenXLSX 为 C++ 开发者提供了一种轻量、现代、跨平台的操作 Excel 文件的方式。
它彻底摆脱了对 Microsoft Excel 应用程序的依赖,仅通过一个头文件和少量静态库就能完成 .xlsx 的创建、读写与修改。配合 CMake 的 find_package 机制,它可以像标准库一样无缝集成到现有项目中,极大地降低了数据报表、记录导出等场景的开发成本。
如果你正在寻找一个 C++ 下简单可靠的 Excel 文件处理库,OpenXLSX 绝对值得一试。