【问题标题】:Open Excel Template from C# Resource从 C# 资源打开 Excel 模板
【发布时间】:2014-10-23 12:05:13
【问题描述】:

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

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

有人可以帮帮我吗?

【问题讨论】:

  • 您可以打开资源并将其保存在最初的临时文件夹中。用户可以随意保存它。也许用 Guid 作为文件名保存临时文件。然后,您可以根据需要清理临时文件夹。可能还有其他方法可以解决这个问题。
  • EPPlus - How to use a template 的可能重复项
  • 这里有两个不相关的问题:如何从模板创建电子表格(使用像 EPPlus 这样的库)以及如何读取资源。只要库可以从流中读取(EPPlus 可以),您就不必将模板保存到磁盘
  • 这个用户在哪里引用 EPPLus?.....

标签: c# excel


【解决方案1】:

这应该可以帮助您。 (在 .NET 4.5 中测试)。

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
}

【讨论】:

    【解决方案2】:

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

    为确保您使用正确的文件夹,请尝试使用此文件夹:

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

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

    【讨论】:

    • OP 询问如何避免保存到磁盘。如果您使用从流中读取而不是仅接受文件名的库,则没有理由
    • 你说得对。但是在不知道他使用哪个库的情况下,我只能提供一个似乎在大多数情况下都有效的解决方案。
    【解决方案3】:

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

    Stream stream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("<Namespace>.Resources.<FileName>")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多