我使用Open XML从MVC生成Excel文档。使用OpenXML从MVC控制器只读工作簿
的代码如下:
public ActionResult ExcelReport()
{
var custId = 1234; //ToDo get from session when it is set
using (MemoryStream mem = new MemoryStream())
{
ExcelReportGenerator excel = new ExcelReportGenerator();
excel.CreateExcelDoc(mem);
var reportName = string.Format("MyReport_{0}.xlsx", custId);
return File(mem.ToArray(), System.Net.Mime.MediaTypeNames.Application.Octet, reportName);
}
}
我CreateExcelDoc方法如下:
public void CreateExcelDoc(MemoryStream mem)
{
SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create(mem, SpreadsheetDocumentType.Workbook);
//SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(mem, false);
//Code removed for brevity
worksheetPart.Worksheet.Save();
spreadsheetDocument.Close();
}
随着创建方法如预期的Excel工作表被下载。不过,我想使工作簿只读的,因此试图在。开方法传递MEM流和isEditable设置为false,但我得到一个YSOD时,我打了控制器错误Exception Details: System.IO.FileFormatException: Archive file cannot be size 0.
这正是我所需要的 - 谢谢:) –