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
Outlook.Interop Items.Find()似乎不匹配正确
vs2013 命名空间“Microsoft.Office”中不存在类型或命名空间名称“Interop”。是否缺少程序集引用?