在C++中处理Excel:库与代码示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

在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

推荐