能否使用XSLT样式表对现有Excel工作表进行数据填充与编辑
C# 实现基于样式表的Excel模板XML数据填充方案
完全可以实现,C#生态下有成熟的方案可以完成「基于现有Excel模板,通过样式表关联XML数据完成值填充」的需求,常见实现方案如下:
方案1:微软官方Open XML SDK(推荐,无依赖)
这是微软官方提供的操作Office Open XML格式(.xlsx)的库,不需要本地安装Excel,支持直接操作Excel内置样式表、绑定XML映射完成数据填充,完全保留模板原有样式。
操作步骤:
- 提前在Excel模板中配置好需要的样式表、XML映射规则,也可以通过代码动态配置
- 安装NuGet包
DocumentFormat.OpenXml - 参考核心代码实现:
using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Spreadsheet; using System.Xml; // 打开现有Excel模板,第二个参数设为true表示允许编辑 using (SpreadsheetDocument doc = SpreadsheetDocument.Open("你的模板路径.xlsx", true)) { WorkbookPart workbookPart = doc.WorkbookPart; // 获取模板内置的XML映射配置 XmlMappingsPart xmlMappingsPart = workbookPart.XmlMappingsPart; // 加载你的源XML数据 XmlDocument xmlData = new XmlDocument(); xmlData.Load("你的数据源文件路径.xml"); // 写入XML数据,会自动匹配映射规则填充到对应单元格,沿用模板预设样式 using var stream = new MemoryStream(); xmlData.Save(stream); stream.Position = 0; xmlMappingsPart.FeedData(stream); workbookPart.Workbook.Save(); }
方案2:EPPlus库(轻量,API更简洁)
EPPlus是开源的轻量Excel操作库,对样式操作、模板填充的封装更友好,不需要提前配置XML映射也能实现需求。
操作步骤:
- 安装NuGet包
EPPlus(注意不同版本的License规则,非商业场景可免费使用) - 参考核心代码实现:
using OfficeOpenXml; using System.Xml.Linq; // 非商业场景需要先配置License ExcelPackage.LicenseContext = LicenseContext.NonCommercial; using (var package = new ExcelPackage(new FileInfo("你的模板路径.xlsx"))) { ExcelWorksheet worksheet = package.Workbook.Worksheets.First(); // 加载源XML数据 XDocument xmlDoc = XDocument.Load("你的数据源文件路径.xml"); // 遍历XML节点填充到指定单元格,自动继承模板对应位置的原有样式 worksheet.Cells["A1"].Value = xmlDoc.Descendants("对应XML节点名").FirstOrDefault()?.Value; // 如果需要批量应用预设样式,可直接调用模板中定义的命名样式 // var targetStyle = worksheet.Workbook.Styles.NamedStyles.First(s => s.Name == "你预设的样式名"); // worksheet.Cells["A1:A20"].StyleName = targetStyle.Name; package.SaveAs(new FileInfo("输出文件路径.xlsx")); }
注意事项
- 如果你使用的是旧版
.xls格式的Excel模板,可替换为NPOI库实现,操作逻辑和EPPlus类似 - 两种方案都不依赖本地安装的Office程序,服务器部署更方便
- 建议提前在模板中把需要用到的样式定义为命名样式,后续代码直接引用样式名即可,不需要重复编写样式配置,维护成本更低
内容的提问来源于stack exchange,提问作者Leon12
相关产品推荐
相关产品推荐

