通过 C++ 写入数据到 Excel 文档 一、概述在 C 开发场景中程序化生成与写入 Excel 文档是企业级应用常见需求涵盖报表导出、数据归档、自动化报告生成等领域。相较于依赖 Microsoft Office 自动化组件的方案专用 Excel 处理库具备部署独立、性能稳定、无需安装 Office 环境等优势。本文基于 Spire.XLS for C 库系统讲解从环境集成到各类数据写入的完整技术实现覆盖单单元格写入、批量数据填充、样式格式化等核心场景。二、环境配置2.1 库的获取与集成Spire.XLS for C 可通过右键项目引用 → 管理 NuGet 程序包搜索Spire.XLS.Cpp并安装。2.2 头文件引用使用该库时需要在源文件中包含主头文件#include Spire.Xls.o.h using namespace Spire::Xls;三、核心对象模型Spire.XLS for C 的对象模型遵循 Excel 文档的层次结构Workbook表示整个 Excel 工作簿是操作的顶层入口Worksheet表示工作簿中的单个工作表CellRange表示一个单元格或单元格区域用于读写数据和设置样式创建新工作簿并获取工作表的典型代码如下// 创建 Workbook 对象 intrusive_ptrWorkbook workbook new Workbook(); // 获取第一个工作表索引从 0 开始 intrusive_ptrWorksheet sheet dynamic_pointer_castWorksheet(workbook-GetWorksheets()-Get(0));四、向单元格写入数据4.1 写入文本值使用Worksheet-GetRange(int row, int column)方法定位到指定单元格行号和列号均从 1 开始然后调用CellRange-SetText()方法写入文本// 定位到第1行第1列写入文本 sheet-GetRange(1, 1)-SetText(L姓名); sheet-GetRange(1, 2)-SetText(L年龄); sheet-GetRange(1, 3)-SetText(L部门);4.2 写入数值写入数值使用CellRange-SetNumberValue()方法sheet-GetRange(2, 2)-SetNumberValue(29); sheet-GetRange(3, 2)-SetNumberValue(27);4.3 写入日期时间对于日期时间类型的数据可直接以文本形式写入并配合格式设置sheet-GetRange(2, 4)-SetText(L2021-02-26); // 设置日期格式 sheet-GetRange(2, 4)-SetNumberFormat(Lyyyy-mm-dd);4.4 完整示例写入员工信息表以下代码演示了如何创建一个包含员工信息姓名、年龄、部门、入职日期的表格#include Spire.Xls.o.h using namespace Spire::Xls; int main() { // 指定输出文件路径 std::wstring outputPath LOutput\\; std::wstring outputFile outputPath LEmployeeData.xlsx; // 创建 Workbook 对象 intrusive_ptrWorkbook workbook new Workbook(); // 获取第一个工作表 intrusive_ptrWorksheet sheet dynamic_pointer_castWorksheet(workbook-GetWorksheets()-Get(0)); // 写入表头 sheet-GetRange(1, 1)-SetText(L姓名); sheet-GetRange(1, 2)-SetText(L年龄); sheet-GetRange(1, 3)-SetText(L部门); sheet-GetRange(1, 4)-SetText(L入职日期); // 写入数据行 sheet-GetRange(2, 1)-SetText(LHazel); sheet-GetRange(2, 2)-SetNumberValue(29); sheet-GetRange(2, 3)-SetText(LMarketing); sheet-GetRange(2, 4)-SetText(L2021-02-26); sheet-GetRange(3, 1)-SetText(LTina); sheet-GetRange(3, 2)-SetNumberValue(27); sheet-GetRange(3, 3)-SetText(LHuman Resource); sheet-GetRange(3, 4)-SetText(L2020-07-13); sheet-GetRange(4, 1)-SetText(LAmy); sheet-GetRange(4, 2)-SetNumberValue(35); sheet-GetRange(4, 3)-SetText(LDevelopment); sheet-GetRange(4, 4)-SetText(L2019-04-01); // 保存工作簿 workbook-SaveToFile(outputFile.c_str(), ExcelVersion::Version2013); workbook-Dispose(); return 0; }五、批量写入数据当需要批量写入大量数据时逐单元格写入的效率较低。Spire.XLS for C 提供了Worksheet-InsertArray()方法可将std::vector中的数据一次性写入指定单元格范围。基本用法如下// 准备二维数据数组 wstring twoDimensionalArray[4][3] { { L区域, LQ1销售额, LQ2销售额 }, { L华东, L125000, L138000 }, { L华北, L98000, L105000 }, { L华南, L112000, L120000 } }; // 获取行数列数 int rowNum sizeof(twoDimensionalArray) / sizeof(twoDimensionalArray[0]); int columnNum sizeof(twoDimensionalArray[0]) / sizeof(twoDimensionalArray[0][0]); // 将二维数组拆分为多个一维向量 for (size_t i 0; i rowNum; i) { vectorLPCWSTR vec_temp; for (size_t j 0; j columnNum; j) { vec_temp.push_back(twoDimensionalArray[i][j].c_str()); } // 插入数组 sheet-InsertArray(vec_temp, 4 i, 1, false); }六、注意事项索引约定行号和列号均从 1 开始计数与 Excel 界面保持一致。内存管理Workbook和Worksheet对象使用完毕后应调用Dispose()方法释放资源。宽字符串所有文本参数需使用宽字符串类型L...或std::wstring因为库内部使用 Unicode 编码。文件格式保存时可通过ExcelVersion枚举指定输出格式支持Version97to2003.xls、Version2013.xlsx等多种版本。异常处理建议在实际生产代码中添加 try-catch 块捕获可能发生的文件 I/O 异常或操作异常。七、小结通过Workbook、Worksheet和CellRange三个核心类开发者可以实现从单个单元格写入到批量数据导入操作。其基于向量的批量写入机制和丰富的样式设置能力使得在 C 应用中生成专业格式的 Excel 报表成为一项高效且可控的任务。

相关新闻

最新新闻

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现 【免费下载链接】serenity The Serenity Operating System 🐞 项目地址: https://gitcode.com/GitHub_Trending/se/serenity 导读 本文以 getopt(3) 手册 为核心&a…

2026/9/23 4:54:42
轻量服务器还是ECS?大促云服务器选购与避坑实战指南

轻量服务器还是ECS?大促云服务器选购与避坑实战指南

每年大促节点,群里永远有人在问同一个问题:“38元的轻量服务器到底怎么抢?为什么我每次点进去都是已售罄?68元直购和99元的ECS我到底选哪个?”作为一个常年帮团队和自己采购云服务器的老用户,我太清楚这种纠…

2026/9/23 8:01:55
为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南

为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南

为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南 【免费下载链接】agents Multi-harness agentic plugin marketplace for Claude Code, Codex, Cursor, OpenCode, GitHub Copilot, and Google Antigravity 项目地址:…

2026/9/23 8:02:11
PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署

PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署

PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署 【免费下载链接】PaddleOCR Turn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between i…

2026/9/23 8:01:38
Spring源码解析:构造器注入的类型转换与候选匹配机制

Spring源码解析:构造器注入的类型转换与候选匹配机制

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/23 8:01:21
openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由

openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由

openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由 【免费下载链接】openai-agents-python A lightweight, powerful framework for multi-agent workflows 项目地址: https://gitcode.com/GitHub_Trending/op/openai-agents-pyth…

2026/9/23 8:02:28

日新闻

周新闻