使用 Excel 文件作为导出模板的最简洁方法
Cleanest approach to using an Excel file as a template for exporting
我有一个 (winforms) 项目,允许用户导出到 Excel 电子表格。此导出是通过互操作 (Microsoft.Office.Interop.Excel
) 完成的,并使用我创建的 "template" 电子表格。模板在导出期间应保持不变,因为代码以编程方式保存到不同的文件路径。我想知道最干净的方法是什么。
目前我已将模板电子表格作为文件添加到我的项目中。我的理解是,如果我将它的 Build Action 属性 设置为 Embedded Resource
,我仍然需要至少暂时将文件保存到用户的硬盘上以便互操作访问它。我的理解是互操作会自动执行 Excel 进程来打开文件。因此,每次用户尝试导出并从那里工作时(即使用 System.IO.Path.GetTempFileName()
),是否建议将我的模板从嵌入式资源复制到用户的临时文件夹中?如果是这样,那么我如何真正掌握嵌入式资源?我试着在 Properties.Resources
中寻找它,但它不在那里。还是有更聪明的方法来解决这个问题?
看下面的link,它解释了如何将嵌入的资源保存到文件:
附带说明:我会将文件存储在用户文件夹中的某个位置(例如我的文档)。然后您可以让用户有机会更改模板。然后您可以先检查模板是否存在,如果不存在则创建它。否则使用现有模板。如果用户破坏了模板,您的导出方法可能会注意到它,您可以让用户有机会恢复到原始模板。
我建议使用 OpenXML(或其高级包装器,如 ClosedXML),而不是 Microsoft.Office.Interop.Excel。
您可以将嵌入式资源读取为字节数组(有点像 that)
并用它喂 SpreadsheetDocument.Open。
// stream "contains" bytes of your embedded template file.
using (var doc = SpreadsheetDocument.Open(stream, true))
{
...
}
编辑电子表格文档后,您可以将其保存在任何地方。
我有一个 (winforms) 项目,允许用户导出到 Excel 电子表格。此导出是通过互操作 (Microsoft.Office.Interop.Excel
) 完成的,并使用我创建的 "template" 电子表格。模板在导出期间应保持不变,因为代码以编程方式保存到不同的文件路径。我想知道最干净的方法是什么。
目前我已将模板电子表格作为文件添加到我的项目中。我的理解是,如果我将它的 Build Action 属性 设置为 Embedded Resource
,我仍然需要至少暂时将文件保存到用户的硬盘上以便互操作访问它。我的理解是互操作会自动执行 Excel 进程来打开文件。因此,每次用户尝试导出并从那里工作时(即使用 System.IO.Path.GetTempFileName()
),是否建议将我的模板从嵌入式资源复制到用户的临时文件夹中?如果是这样,那么我如何真正掌握嵌入式资源?我试着在 Properties.Resources
中寻找它,但它不在那里。还是有更聪明的方法来解决这个问题?
看下面的link,它解释了如何将嵌入的资源保存到文件:
附带说明:我会将文件存储在用户文件夹中的某个位置(例如我的文档)。然后您可以让用户有机会更改模板。然后您可以先检查模板是否存在,如果不存在则创建它。否则使用现有模板。如果用户破坏了模板,您的导出方法可能会注意到它,您可以让用户有机会恢复到原始模板。
我建议使用 OpenXML(或其高级包装器,如 ClosedXML),而不是 Microsoft.Office.Interop.Excel。 您可以将嵌入式资源读取为字节数组(有点像 that) 并用它喂 SpreadsheetDocument.Open。
// stream "contains" bytes of your embedded template file.
using (var doc = SpreadsheetDocument.Open(stream, true))
{
...
}
编辑电子表格文档后,您可以将其保存在任何地方。