使用ClosedXML填充Excel模板时VBA与格式丢失问题求助
问题:ClosedXML处理带VBA、表格样式及数据透视表的Excel模板时的异常
需求背景
- 在未安装Excel的服务器上,通过C#结合ClosedXML生成Excel报表
- 操作流程:
- 手动创建包含表格、数据透视表(PivotTable)及格式的宏启用型Excel模板(.xlsm)
- 使用ClosedXML打开模板并填充表格数据
- 模板中的VBA代码无需在服务器端修改
代码示例
using ClosedXML.Excel; // tpt.xlsm 是宏启用工作簿 // 包含单个工作表("tpt"):该工作表仅有表格("T_1")和关联的数据透视表("PT_report") // 还包含VBA模块("Module1"),定义了测试宏 // 'Module1 内容 // Sub helloWorld() // MsgBox "hello world!" // End Sub using (var workbook = XLWorkbook.OpenFromTemplate("D:\\tmp\\closedXML\\tpt.xlsm")) { var worksheet = workbook.Worksheets.Worksheet("tpt"); var t_1 = worksheet.Tables.Table("T_1"); var newData = new List<Person>(){ new Person(23,"person 1") , new Person(24,"person 2") , new Person(25,"person 3")}; t_1.ReplaceData(newData, propagateExtraColumns: true); workbook.SaveAs("D:\\tmp\\closedXML\\generatedReport.xlsm"); } record Person(int age, string Name);
遇到的问题
- 生成的
generatedReport.xlsm文件丢失原模板中的VBA模块 - 工作表"tpt"内的表格"T_1"的标准配色样式未被保留
- 数据透视表的条件格式丢失
使用环境
- 模板由Microsoft 365(Version 2301, Build 16130.20394)创建
- 代码基于.NET7、ClosedXML Version="0.101.0"开发
内容的提问来源于stack exchange,提问作者AleV
相关产品推荐
相关产品推荐

