在C++中处理Excel:库和工具
处理Excel表格(.xlsx格式)是应用编程中的常见任务之一。C++本身不原生支持此格式,但有多个高质量的库允许您读取、创建和编辑Excel文件。在本文中,我们将介绍四种主要方法:libxlsxwriter、xlsxio、OpenXLSX以及通过Windows上的COM接口进行操作。
1. libxlsxwriter — 即时创建XLSX文件
libxlsxwriter是一个C语言库,带有C++封装。它允许创建功能完整的XLSX文件,支持格式化、公式、图表和单元格合并。主要优势在于速度快且内存占用极低。
安装
从GitHub下载源代码,并通过CMake编译:
git clone https://github.com/jmcnamara/libxlsxwriter.gitcd libxlsxwritermkdir build && cd buildcmake .. -DCMAKE_BUILD_TYPE=Releasemakesudo make install示例:创建带公式的表格
#include <xlsxwriter.h>
int main() { lxw_workbook *workbook = workbook_new("report.xlsx"); lxw_worksheet *worksheet = workbook_add_worksheet(workbook, "销售");
// 表头 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, 0, 3, "总计", NULL);
// 数据 worksheet_write_string(worksheet, 1, 0, "苹果", NULL); worksheet_write_number(worksheet, 1, 1, 100, NULL); worksheet_write_number(worksheet, 1, 2, 2.5, NULL);
// 公式 worksheet_write_formula(worksheet, 1, 3, "=B2*C2", NULL);
workbook_close(workbook); return 0;}编译时使用:
g++ -o create_excel create_excel.cpp -lxlsxwriter2. xlsxio — 读取和简单写入
xlsxio是一个轻量级的C语言库,专注于读取XLSX文件。它支持流式解析,从而可以处理大文件而无需加载到内存中。
安装
git clone https://github.com/brechtsanders/xlsxio.gitcd xlsxiomkdir build && cd buildcmake ..makesudo make install示例:从Excel读取数据
#include <xlsxio_read.h>
int main() { xlsxioreader xlsxioread = xlsxioread_open("data.xlsx"); if (!xlsxioread) return 1;
xlsxioreadersheet sheet = xlsxioread_sheet_open(xlsxioread, NULL, 0); if (sheet) { 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(xlsxioread); return 0;}3. OpenXLSX — 现代C++接口
OpenXLSX是一个基于C++17的库,提供了面向对象的API来处理XLSX文件。支持读取、写入、样式以及多工作表操作。
安装
git clone https://github.com/troldal/OpenXLSX.gitcd OpenXLSXmkdir build && cd buildcmake .. -DOPENXLSX_BUILD_TESTS=OFFmakesudo make install示例:带格式的写入
#include <OpenXLSX/OpenXLSX.hpp>
int main() { using namespace OpenXLSX;
XLDocument doc; doc.create("formatted.xlsx"); auto wks = doc.workbook().worksheet("Sheet1");
// 带格式写入 XLCellValue v