C 语言

关注公众号 jb51net

关闭
首页 > 软件编程 > C 语言 > C++ 写入数据

如何通过C++ 写入数据到Excel 表格

作者:deepseek

本文基于Spire.XLS for C++ 库,系统讲解从环境集成到各类数据写入的完整技术实现,覆盖单单元格写入、批量数据填充、样式格式化等核心场景,感兴趣的朋友跟随小编一起看看吧

一、概述

在 C++ 开发场景中,程序化生成与写入 Excel 文档是企业级应用的常见需求,涵盖报表导出、数据归档、自动化报告生成等领域。然而,标准 C++ 本身并不具备直接读写 Excel 文件的能力——.xlsx 文件本质上是 ZIP 封装的 XML 结构,无法通过标准 fstream 库直接解析。因此,开发者必须借助第三方库或平台特定的 API 来实现这一功能。

根据项目需求、平台环境和预算约束,目前主流的技术方案可分为以下几类:

二、开源第三方库方案

开源库是目前 C++ 开发者操作 Excel 最常用的方案,具有跨平台、免费、社区活跃等优势。

2.1 xlnt

xlnt 是一个基于 C++14 的开源库,用于创建、操作和读写 Excel 文件,支持 .xlsx 格式-。其设计以零依赖架构跨平台支持为特色。

安装方式(Windows 下使用 vcpkg):

vcpkg install xlnt

基本用法示例

#include <xlnt/xlnt.hpp>
void export_data(const std::string &file_path) {
    // 创建一个新的工作簿
    xlnt::workbook wb;
    // 获取当前活动工作表
    xlnt::worksheet ws = wb.active_sheet();
    // 向单元格写入数据
    ws.cell("A1").value("Hello");
    ws.cell("B1").value("World");
    ws.cell("A2").value(42);
    ws.cell("B2").value(3.14);
    // 保存工作簿
    wb.save(file_path);
}

xlnt 支持 C++11 及以上版本,适合需要读写双向操作且对依赖项有严格要求的项目。

2.2 OpenXLSX

OpenXLSX 是一个开源、轻量级、跨平台的 C++ 库,专为高效、无依赖地读写符合 Office Open XML(OOXML)标准的 Excel 文件(.xlsx 格式)而设计-。其核心设计理念是 “零外部运行时依赖” ——不依赖 Microsoft COM。

该库采用 C++17 标准,提供现代化的 C++ 接口,支持 Unicode 文本、公式、单元格格式等高级功能。注意:OpenXLSX 项目已从 GitHub 迁移至 Codeberg。

安装方式(Linux/macOS):

git clone https://github.com/troldal/OpenXLSX.git
cd OpenXLSX
mkdir build && cd build
cmake .. && make
sudo make install

Windows 下使用 vcpkg

vcpkg install openxlsx

基本用法示例

#include <OpenXLSX.hpp>
int main() {
    // 创建新的 Excel 文件
    OpenXLSX::XLDocument doc;
    doc.create("example.xlsx");
    // 获取工作表
    auto wks = doc.workbook().worksheet("Sheet1");
    // 写入数据
    wks.cell("A1").value() = "Hello, OpenXLSX!";
    wks.cell("B1").value() = 42;
    // 保存文件
    doc.save();
    return 0;
}

编译命令

g++ -std=c++17 -o converter main.cpp -lOpenXLSX

OpenXLSX 适合需要完整读写功能且追求轻量无依赖的现代 C++ 项目。但需要注意,它不支持旧的 .xls 格式,也不支持公式计算-。

2.3 libxlsxwriter

libxlsxwriter 是一个用于生成 Excel XLSX 文件的 C 语言库(可在 C++ 项目中使用),支持丰富的格式化选项、公式、图表等功能,且无需依赖 Microsoft Excel

关键特点

基本用法示例(参考-):

#include <xlsxwriter.h>
int main() {
    lxw_workbook  *workbook  = workbook_new("output.xlsx");
    lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
    worksheet_write_string(worksheet, 0, 0, "Hello", NULL);
    worksheet_write_number(worksheet, 1, 0, 123.45, NULL);
    workbook_close(workbook);
    return 0;
}

libxlsxwriter 适合只需要导出数据、追求高性能轻量级的场景。

2.4 其他开源库

三、商业第三方库方案

对于企业级项目,商业库通常提供更完善的功能、更稳定的性能和专业技术支持。

3.1 Aspose.Cells for C++

Aspose.Cells for C++ 是一个原生 C++ 库,使 C++ 开发人员能够以编程方式创建、操作和转换电子表格,无需 Office 自动化或 Microsoft Excel 应用程序

支持格式-:

基本用法(参考--):

// 创建 Workbook 类的对象
// 将第一个工作表放入 Worksheet 对象
// 使用 Worksheet.GetCells() 方法获取单元格
// 使用 Cells.Get() 方法访问目标单元格

3.2 Spire.XLS for C++

Spire.XLS for C++ 是一个专业的 Excel C++ API,可用于在任何类型的 C++ 应用程序中创建、读取、写入和转换 Excel 文件。

环境配置

通过 NuGet 包管理器安装:搜索 Spire.XLS.Cpp 并安装。

核心对象模型

写入数据示例

// 写入文本
worksheet->GetRange(1, 1)->SetText(L"姓名");
// 写入数值
worksheet->GetRange(2, 2)->SetNumberValue(25);

批量写入

Spire.XLS 提供了 Worksheet->InsertArray() 方法,可将 std::vector 中的数据一次性写入指定单元格范围,显著提升大批量数据写入的效率。

注意事项

3.3 LibXL

LibXL 是 C++ 领域最成熟的商业级 Excel 操作库之一(提供免费试用版与付费授权版),封装了对 .xls(BIFF8)和 .xlsx(Office Open XML)双格式的读写能力。

其 C++ API 设计简洁直观,支持单元格样式、公式、多工作表、字体颜色、合并单元格等高级功能。LibXL 的最大优势是无需安装 Microsoft Office 或 .NET Framework

四、COM 接口方案(Windows 平台)

如果项目运行在 Windows 平台且已安装 Microsoft Office,可以使用 COM(Component Object Model)接口来操作 Excel 文件。这需要使用 Active Template Library(ATL)或 Microsoft Foundation Classes(MFC)等库与 COM 接口交互。

技术原理-:

C++ 通过 COM 机制启动 Excel 进程(进程外服务器),以 IDispatch 接口为桥梁,动态调用 ApplicationWorkbookWorksheetRange 等对象的方法与属性。

核心技巧-:

若要填充多单元格区域,而无需一次填充一个单元格,可以将 Range 对象的 Value 属性设置为二维数组。同样,也可以使用 Value 属性一次性检索多个单元格的二维值数组。

基本步骤(参考):

注意事项

五、轻量替代方案:CSV 格式

如果业务需求仅是导出结构化数据,而不强求 .xlsx 格式,CSV(逗号分隔值)是最轻量的选择

优势

示例代码

#include <fstream>
#include <vector>
#include <string>
void export_to_csv(const std::string& filename, 
                   const std::vector<std::vector<std::string>>& data) {
    std::ofstream file(filename);
    for (const auto& row : data) {
        for (size_t i = 0; i < row.size(); ++i) {
            file << row[i];
            if (i < row.size() - 1) file << ",";
        }
        file << "\n";
    }
}

六、方案选型建议

方案适用场景优点缺点
xlnt跨平台、需要读写、零依赖开源免费、C++14、功能完善仅支持 .xlsx
OpenXLSX现代 C++、轻量无依赖开源、C++17、无 COM 依赖仅支持 .xlsx、不支持公式计算
libxlsxwriter大数据量导出、仅需写入高性能、流式写入、轻量只写不读
Aspose.Cells企业级、功能全面功能最完善、多格式支持需付费
Spire.XLS企业级、易集成NuGet 集成方便、功能完整需付费
COM 接口Windows + Office 环境功能最全、无需额外库依赖 Office、性能较低
CSV简单数据导出零依赖、实现简单功能有限、无格式

选型速查

七、总结

C++ 写入 Excel 表格并非原生支持的功能,但通过丰富的第三方库和平台 API,开发者可以根据具体需求选择最合适的方案。

从开源免费的 xlnt、OpenXLSX、libxlsxwriter,到功能完备的商业库 Aspose.Cells、Spire.XLS、LibXL,再到 Windows 平台原生的 COM 接口,以及最简单的 CSV 替代方案——每种技术路线都有其适用的场景和权衡。

在实际项目选型时,建议综合考虑以下因素:是否需要读取现有文件数据量大小跨平台需求预算约束是否依赖 Office 环境等,选择最适合项目长期发展的方案。

到此这篇关于如何通过C++ 写入数据到Excel 表格的文章就介绍到这了,更多相关C++ 写入数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文