在 C++ 中操作 Excel:库概览和代码示例
尽管 C++ 没有对 Excel 格式的内置支持,但存在几个成熟的库,允许您读取、创建和编辑 .xlsx 和 .xls 文件。在本文中,我们将介绍三种最流行的工具:libxlsxwriter、xlsxio 和 OpenXLSX。您将了解如何安装它们中的每一个,并获得针对典型任务(从生成报告到导入数据)的工作示例。
1. libxlsxwriter — 从头创建 XLSX
libxlsxwriter 是一个轻量级的 C 库,用于写入 Excel 2007+ (XLSX) 文件。它不需要 COM 对象或安装 Office。支持格式化、公式、图表、单元格合并和条件格式化。
安装 (Linux / macOS):
git clone https://github.com/jmcnamara/libxlsxwriter.gitcd libxlsxwritermakesudo make install示例:创建简单报告
#include <xlsxwriter.h>
int main() { lxw_workbook *workbook = workbook_new("report.xlsx"); lxw_worksheet *worksheet = workbook_add_worksheet(workbook, "Sales");
// 标题 worksheet_write_string(worksheet, 0, 0, "商品", NULL); worksheet_write_string(worksheet, 0, 1, "数量", NULL); worksheet_write_string(worksheet, 0, 2, "价格", NULL);
// 数据 worksheet_write_string(worksheet, 1, 0, "笔记本电脑", NULL); worksheet_write_number(worksheet, 1, 1, 10, NULL); worksheet_write_number(worksheet, 1, 2, 75000, NULL);
// 求和公式 worksheet_write_formula(worksheet, 2, 2, "=C2*B2", NULL);
workbook_close(workbook); return 0;}编译:g++ -o create_excel create_excel.cpp -lxlsxwriter
优点:高性能、体积小、积极维护。
缺点:仅支持写入(无法读取现有文件)。
2. xlsxio — 读取和写入 XLSX
xlsxio 是一个 C 库,带有 C++ 绑定,支持读取和写入 XLSX 文件。基于 minizip 和 expat。非常适合流式处理大文件。
安装:
git clone https://github.com/brechtsanders/xlsxio.gitcd xlsxiocmake .makesudo make install示例:从 Excel 读取数据
#include <xlsxio_read.h>
int main() { xlsxioreader reader = xlsxioread_open("data.xlsx"); if (reader) { xlsxioreadersheet sheet = xlsxioread_sheet_open(reader, NULL, XLSXIOREAD_SKIP_EMPTY_ROWS); while (xlsxioread_sheet_next_row(sheet)) { const char* value; while ((value = xlsxioread_sheet_next_cell(sheet)) != NULL) { printf("%s\\t", value); } printf(""); } xlsxioread_sheet_close(sheet); xlsxioread_close(reader); } return 0;}编译:g++ -o read_excel read_excel.cpp -lxlsxio_read
优点:双向操作,支持大文件。
缺点:格式化功能有限(仅支持字符串和数字)。
3. OpenXLSX — 现代 C++17 接口
OpenXLSX 是一个用于 C++17 的仅头文件库,提供了用于读取和写入 XLSX 的面向对象 API。除了标准库外,不需要外部依赖。
安装:
git clone https://github.com/troldal/OpenXLSX.gitcd OpenXLSXmkdir build && cd buildcmake ..makesudo make install示例:创建带格式的文件
#include <OpenXLSX/OpenXLSX.hpp>using namespace OpenXLSX;
int main() {