EPPlus - 使用模板时保存的文件已损坏

时间:2014-01-14 08:40:47

标签: c# export-to-excel epplus

我正在评估EPPlus作为GemBox的替代品,但是甚至无法保存有效的Excel文件。我有这个最小的C#代码:

在图书馆:

public Stream GenerateReport(string templateFilePath)
{
    using (var xls = new OfficeOpenXml.ExcelPackage(new FileInfo(templateFilePath), true))
    {
      var stream = new MemoryStream();
      xls.SaveAs(stream);
      stream.Position = 0;
      return stream;
    }
}

在控制器中:

return File(GenerateReport("filename.xltx"), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "filename.xlsx");

文件已成功创建并保存,但是当我用Excel打开它时,我收到错误:

  

“我们发现'filename.xlsx'中的某些内容存在问题。你想要吗?   试图尽可能多地恢复?“。

我回答是,得到:

  

“Microsoft Excel无法打开或修复工作簿,因为   它是腐败的“。

我已经验证模板文件格式正确,而stackoverflow上没有其他任何建议的解决方案可以解决问题。

有什么建议吗?

更新

我也尝试过不使用模板而且没有问题:

using (var xls = new OfficeOpenXml.ExcelPackage())
{
   xls.Workbook.Worksheets.Add("New");
   var stream = new MemoryStream();
   xls.SaveAs(stream);
   stream.Position = 0;
   return stream;
}

更新2:

将.xltx模板另存为.xlsx并使用.xlsx作为模板不会在打开时引发任何错误。

2 个答案:

答案 0 :(得分:2)

我在这里回答了类似的问题:

.xlsx Created and Saved Using Template with EPPlus is Unreadable/Corrupt

简短回答:EPPlus实际上并不支持xltx模板文件,'模板'参数只需要一个适当预先格式化的xlsx文件。

答案 1 :(得分:0)

我最近发现了类似的错误(Excel抱怨一些无效的xl / styles.xml部分)。搜索后我进入解决方案:将版本更改为3.1.3(3.1.2有一个错误)。似乎3.1.1也可以。