在C++中处理Excel:库概览与实践示例
在开发C++应用程序时,经常需要与Microsoft Excel文件(.xls和.xlsx格式)进行交互。这可能涉及导出报告、导入数据、自动化表格或分析大量信息。与拥有丰富标准库的语言(Python、C#)不同,C++没有内置的处理Excel的工具,但有几种强大的第三方库可以解决这个问题。在本文中,我们将介绍三种流行的解决方案:xlnt、libxl和OpenXLSX,并为每种库提供代码示例。
1. xlnt库(免费,开源)
xlnt是一个现代的C++库,用于读取、写入和修改.xlsx格式的文件。它不依赖于COM对象或已安装的Excel,使其成为跨平台项目(Windows、Linux、macOS)的理想选择。该库使用C++14/17标准,并得到社区的积极支持。
主要功能:
- 读取和写入单元格、行、列。
- 支持样式(字体、颜色、边框、对齐)。
- 处理公式、范围、合并单元格。
- 管理多个工作表。
- 处理图像和图表(有限支持)。
安装(通过vcpkg或从源码编译):
vcpkg install xlnt示例:创建一个简单的XLSX文件
#include <xlnt/xlnt.hpp>
int main() { xlnt::workbook wb; xlnt::worksheet ws = wb.active_sheet(); ws.title("报告");
// 写入数据 ws.cell("A1").value("名称"); ws.cell("B1").value("数量"); ws.cell("C1").value("价格");
ws.cell("A2").value("商品1"); ws.cell("B2").value(10); ws.cell("C2").value(250.5);
// 标题样式 xlnt::header_footer hf; xlnt::font bold_font(true); ws.cell("A1").font(bold_font);
wb.save("example.xlsx"); return 0;}示例:从现有文件读取数据
#include <xlnt/xlnt.hpp>#include <iostream>
int main() { xlnt::workbook wb; wb.load("example.xlsx"); xlnt::worksheet ws = wb.active_sheet();
for (auto row : ws.rows(false)) { for (auto cell : row) { std::cout << cell.to_string() << "\\t"; } std::cout << std::endl; } return 0;}2. libxl库(商业版,有免费版本)
libxl是一个快速轻量的库,用于处理.xls和.xlsx文件。它既支持旧的Excel 97-2003二进制格式,也支持现代的OOXML格式。该库采用商业许可证分发,但非商业用途可使用免费版本(有限制,工作表上带有水印)。
主要功能:
- 支持两种格式:XLS和XLSX。
- 单元格格式化:字体、颜色、边框、填充。
- 处理公式、合并单元格、自动筛选。
- 管理工作表、图表(有限支持)。
- 处理大文件时的高性能。
安装:从官方网站(libxl.com)下载SDK,并将头文件和库连接到您的项目。
示例:将数据写入XLSX
#include "libxl.h"
int main() { libxl::Book* book = xlCreateXMLBook(); // 或使用 xlCreateBook() 处理 XLS if (book) { libxl::Sheet* sheet = book->addSheet("工作表1"); if (sheet) { sheet