权双
发布于 2026-05-31 / 29 阅读
1

OpenXLSX:高效的 C++ Excel 库

一、OpenXLSX 是什么?

OpenXLSX 是一个 C++ 库,用于读取、写入、创建和修改 Microsoft Excel文件(.xlsx 格式)。

📦 GitHub:https://github.com/troldal/OpenXLSX

🧩 支持平台:Windows / Linux / macOS

🧠 语言标准:C++17

📁 文件格式:Microsoft Office EXCEL(.xlsx)

二、为什么选择 OpenXLSX?

在实际项目里,当你需要在 C++ 中生成报表、导出数据、读取配置表格时,OpenXLSX是一个不错的选择:

  1. 极简依赖
    自带 pugixml,头文件 + 静态库即可工作,编译简单。

  2. C++17 现代化风格
    API接口设计简洁直观,上手速度快。

  3. 跨平台
    使用 CMake 构建系统,一份代码可同时运行在 Windows、Linux 和 macOS 上。

  4. 活跃维护,文档清晰
    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 绝对值得一试。