从C#资源打开Excel模板

从C#资源打开Excel模板,c#,excel,C#,Excel,我知道以前也有人问过类似的问题,但我找不到确切的答案 我有一个Excel文件,我想用于报告钱包,并填充大量结果。所以我计划将一个Excel模板文件作为资源,打开它,然后填充它,但它将作为未保存的“Book1”工作簿保留。我正在阅读的所有内容似乎都在谈论在物理磁盘上的某个位置保存resorce文件的副本,但我真的不想这样做,因为我想让用户决定在何处保存它 有人能帮我吗?我建议您将该文件的临时版本保存在用户AppData\Local\目录中。因为在此文件夹中,您始终具有读写权限。创建报告后,可以显示

我知道以前也有人问过类似的问题,但我找不到确切的答案

我有一个Excel文件,我想用于报告钱包,并填充大量结果。所以我计划将一个Excel模板文件作为资源,打开它,然后填充它,但它将作为未保存的“Book1”工作簿保留。我正在阅读的所有内容似乎都在谈论在物理磁盘上的某个位置保存resorce文件的副本,但我真的不想这样做,因为我想让用户决定在何处保存它


有人能帮我吗?

我建议您将该文件的临时版本保存在用户AppData\Local\目录中。因为在此文件夹中,您始终具有读写权限。创建报告后,可以显示“保存”对话框,以决定将excel文件复制到何处

为确保使用正确的文件夹,请尝试使用以下文件夹:

Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\YourFolder";

你说的“资源”是什么意思?是否要将报表存储在程序集中?

您可以将其添加为资源,并使用以下示例将其提取到流中Namespace>是应用程序的名称空间,是文件的实际名称。这将允许您提示用户输入保存位置,然后将流写入磁盘

Stream stream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("<Namespace>.Resources.<FileName>")
Stream=System.Reflection.Assembly.getExecutionGassembly().GetManifestResourceStream(“.Resources.”)
这应该能帮到你。(在.NET 4.5中测试)


您可以先打开资源并将其保存在临时文件夹中。用户可以随意保存它。可能将临时文件保存为Guid文件名。然后,您可以根据需要清理临时文件夹。可能还有其他方法来解决这个问题。这里有两个不相关的问题:如何从模板创建电子表格(使用像EPPlus这样的库)以及如何读取资源。只要库可以从流中读取(EPPlus可以),您就不必将模板保存到磁盘。问题中,此用户是否引用EPPlus?…OP询问如何避免保存到磁盘。如果您使用从流中读取的库,而不是只接受您有权使用的文件名,则没有理由这样做。但是,在不知道他使用哪个库的情况下,我只能提供一个在大多数情况下似乎有效的解决方案。
public void openExcelTemplateFromResources ()
{
    string tempPath = System.IO.Path.GetTempFileName(); 

    System.IO.File.WriteAllBytes(tempPath, Properties.Resources.excelResource);

    Excel.Application excelApplication = new Excel.Application();
    Excel._Workbook excelWorkbook;
    excelWorkbook = excelApplication.Workbooks.Open(tempPath)

    excelApplication.Visible = true; // at this point its up to the user to save the file
}