ClosedXML:不保留格式和 VBA 代码

问题描述 投票:0回答:1

我正在尝试找到一种在服务器(未安装 Excel)上使用 C# 创建 excel 报告的简单方法。 我知道有几个选项(OpenXML、EEPLUS),我正在尝试使用 ClosedXML。 我的过程很简单:

  1. 首先我手动创建一个 Excel 文件,用作模板(带有表格、数据透视表和一些格式)
  2. 我使用 ClosedXML 只是为了打开这个模板并用数据填充表格
  3. 可选的模板文件可以有一些VBA代码(但我不需要在服务器上修改它)

ClosedXML 实际上填满了我的表格,但我面临几个问题:它们太基础了,我肯定遗漏了一些东西。

using ClosedXML.Excel;

// tpt.xlsm is a macro enabled workbook
// this workbook contains a single worksheet ("tpt"): 
// this worksheet only contains a table ("T_1") and a linked pivot table ("PT_report")
// this workbook also contains a VBA module ("Module1") where it is defined a test macro

// 'Module1 content
// 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);

当我运行上面的代码时,我遇到了几个问题:

  1. VBA 模块在生成的 generatedReport.xlsm 文件中丢失
  2. “tpt”工作表中表格(“T_1”)的样式 未保留(我在 tpt.xlsm 中使用标准配色方案)
  3. 数据透视表中的条件格式丢失

我正在使用 Microsoft 365(版本 2301,内部版本 16130.20394)生成模板。运行代码 .net7 和 ClosedXML Version="0.101.0"

c# excel closedxml
1个回答
0
投票

在遵循 Francois Botha 的建议后,我在 GitHub 存储库上打开了 2 个问题:我使用了错误的方法打开文件:而不是

using (var workbook = XLWorkbook.OpenFromTemplate(tpt_m))
我应该写的
using (var workbook = new XLWorkbook(tpt_m))
(请参考https://github.com/ClosedXML/ClosedXML/issues/2077)。

现在代码按预期工作,除了最后一个问题(数据透视表条件格式丢失),应该在 ClosedXML 的未来版本中解决(https://github.com/ClosedXML/ClosedXML/issues/2075 )

© www.soinside.com 2019 - 2024. All rights reserved.