XmlMap.Import 不使用 Interopt

Posted

技术标签:

【中文标题】XmlMap.Import 不使用 Interopt【英文标题】:XmlMap.Import without using Interopt 【发布时间】:2021-10-31 02:36:58 【问题描述】:

我使用 Xml 映射定义了一个 Excel 模板,它将根据我导入的 Xml 生成 Excel 报告。

我需要在服务器上生成此报告,因此我无法使用 Microsoft Interopt。如何使用开源库执行以下 (C#)?

Application excel = new Application();

Workbook workbook = excel.Workbooks.Open(Path.Combine(Directory.GetCurrentDirectory(), "TestTemplate.xlsx"));

var result = workbook.XmlMaps[1].Import(Path.Combine(Directory.GetCurrentDirectory(), "TestData.xml"), true);

workbook.Save();

workbook.Close();
excel.Workbooks.Close();

这使我可以在自己的 PC(使用 Office 365)上对 Excel 工作表进行格式化,然后保存模板并随项目一起发布,然后更新 XML 数据并另存为新报告。

【问题讨论】:

使用 oledb 驱动程序(或 ACE,如果有办公室)。请参阅:connectionstrings.com/excel 但是@jdweng 怎么样? 见 msdn : docs.microsoft.com/en-us/dotnet/api/… 【参考方案1】:

我最终选择了 ClosedXML 的报告插件,该插件具有变量替换功能,最终也能正常工作。

他们网站上的例子:

protected void Report()

    const string outputFile = @".\Output\report.xlsx";
    var template = new XLTemplate(@".\Templates\report.xlsx");

    using (var db = new DbDemos())
    
        var cust = db.customers.LoadWith(c => c.Orders).First();
        template.AddVariable(cust);
        template.Generate();
    

    template.SaveAs(outputFile);

    //Show report
    Process.Start(new ProcessStartInfo(outputFile)  UseShellExecute = true );

【讨论】:

以上是关于XmlMap.Import 不使用 Interopt的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 2.0 中编写 excel 文件而不使用任何第三方 dlls/interop/sdk

Word Interop不保存文件

Outlook.Interop Items.Find()似乎不匹配正确

vs2013 命名空间“Microsoft.Office”中不存在类型或命名空间名称“Interop”。是否缺少程序集引用?

Interop Word 处理注意

我在 .net 应用程序中找不到 microsoft.office.interop.excel