通过 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 报表成为一项高效且可控的任务。

相关新闻

Switch大气层22.5.0系统升级与优化全攻略

Switch大气层22.5.0系统升级与优化全攻略

1. Switch 22.5.0大气层系统升级全流程解析作为任天堂Switch破解领域的核心工具,大气层(Atmosphere)系统的每次版本更新都牵动着大量玩家的心。22.5.0版本作为近期的重要更新,在系统兼容性和稳定性方面都有显著提升。但不同于官方…

2026/11/12 13:24:24 阅读更多 →
深入解析TMS320C5x DSP的HPI与串行端口通信机制及指令集优化

深入解析TMS320C5x DSP的HPI与串行端口通信机制及指令集优化

1. 项目概述:深入TMS320C5x DSP的通信与计算核心在嵌入式信号处理的世界里,德州仪器(TI)的TMS320C5x系列数字信号处理器(DSP)是一个绕不开的经典。它不仅是许多老工程师的“青春记忆”,其设计思…

2026/11/13 15:36:27 阅读更多 →
湘楚人力越南实体机构落地!全周期服务护航中资企业出海

湘楚人力越南实体机构落地!全周期服务护航中资企业出海

筹备期摸不清当地薪资水平,招人预算总超支?投产期一线普工缺口大,批量招聘迟迟不到位?技术岗(CNC/SMT/机电)熟手难寻,产能爬坡跟不上?想找懂中文、懂中国管理逻辑的本地管理者&#…

2026/11/13 0:15:20 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/14 5:13:29 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/14 5:13:29 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/14 5:13:29 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/13 22:08:41 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/14 2:41:37 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/14 5:13:29 阅读更多 →

日新闻

周新闻

月新闻