我正在尝试找到一种在服务器(未安装 Excel)上使用 C# 创建 excel 报告的简单方法。 我知道有几个选项(OpenXML、EEPLUS),我正在尝试使用 ClosedXML。 我的过程很简单:
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);
当我运行上面的代码时,我遇到了几个问题:
我正在使用 Microsoft 365(版本 2301,内部版本 16130.20394)生成模板。运行代码 .net7 和 ClosedXML Version="0.101.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 )