在C++项目中处理Excel文件,通常不会自己解析xlsx或xls的二进制结构,而是借助成熟的第三方库来完成读写。常见的方案有libxlsxwriter用于写xlsx、OpenXLSX用于读写xlsx、以及libxl这种商业库可支持xls与xlsx。下面以开源库为例说明集成方式。

常用第三方库对比
| 库名称 | 支持格式 | 授权方式 | 主要功能 |
|---|---|---|---|
| libxlsxwriter | xlsx | 免费开源 | 写Excel |
| OpenXLSX | xlsx | 免费开源 | 读写Excel |
| libxl | xls,xlsx | 商业 | 读写Excel |
使用libxlsxwriter写Excel
libxlsxwriter是一个纯C写的生成xlsx文件库,C++可直接调用。在Linux下可通过源码编译安装,Windows下可链接其静态库。
基础写入示例
#include <xlsxwriter.h>
int main() {
// 创建新的工作簿
lxw_workbook *workbook = workbook_new("demo.xlsx");
// 添加工作表
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
// 写入字符串与数字
worksheet_write_string(worksheet, 0, 0, "姓名", NULL);
worksheet_write_string(worksheet, 1, 0, "张三", NULL);
worksheet_write_number(worksheet, 1, 1, 23, NULL);
// 关闭并保存文件
workbook_close(workbook);
return 0;
}
使用OpenXLSX读取Excel
OpenXLSX基于C++17,以头文件加源文件方式提供,可方便集成到CMake工程里,既能写也能读。
读取示例
#include <OpenXLSX.hpp>
#include <iostream>
int main() {
OpenXLSX::XLDocument doc;
doc.open("demo.xlsx");
auto wks = doc.workbook().worksheet("Sheet1");
// 读取第2行第1列单元格
auto cell = wks.cell(2, 1);
std::cout << cell.value().get<std::string>() << std::endl;
doc.close();
return 0;
}
集成注意事项
- 确认编译器版本满足库的要求,例如OpenXLSX需要C++17。
- 在CMake中使用target_link_libraries链接对应库文件。
- 若只需导出报表,选libxlsxwriter更轻量;若需双向操作,选OpenXLSX。
合理选用第三方库,可以避免直接处理Office Open XML格式,显著降低开发难度。
小结
通过libxlsxwriter与OpenXLSX等第三方库,C++程序能够稳定地处理Excel文件。开发者应根据读写需求与授权限制来选择方案,并按文档完成编译集成即可快速落地功能。