【发布时间】:2018-06-22 18:59:26
【问题描述】:
我将操作称为“导出”,在该操作中我传递了一个视图模型列表并定义了格式
public ActionResult DownloadTokenlist(string startDate = null, string endDate = null)
{
using (HRCTSStatisticDb db = new HRCTSStatisticDb(Setting.ClientId))
{
List<TokenExportViewModel> tokenExportViewModels = new List<TokenExportViewModel>();
Response.AddHeader("content-disposition", $"attachment;filename=Tokenlist_{DateTime.Now.ToString("dd.MM.yyyy")}.xlsx");
log.InfoFormat($"The {new HomeController().UserRole(Context.LoggedInUser)}: {Context.LoggedInUser} has used the exceldownload");
return File(new ExcelExport().Export(tokenExportViewModels), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
}
}
我调用的操作(ExcelEngine 由 Syncfusion 提供):
public MemoryStream Export(List<TokenExportViewModel> list)
{
MemoryStream stream = new MemoryStream();
using (ExcelEngine excelEngine = new ExcelEngine())
{
IApplication application = excelEngine.Excel;
application.DefaultVersion = ExcelVersion.Excel2010;
IWorkbook workbook = application.Workbooks.Create(1);
IWorksheet worksheet = workbook.Worksheets.Create("Tokenlist");
IStyle defaultStyle = workbook.Styles.Add("default");
defaultStyle.Font.Size = 12;
worksheet.SetDefaultColumnStyle(1, 20, defaultStyle);
worksheet.SetDefaultRowStyle(1, 300, defaultStyle);
worksheet.UsedRange.AutofitColumns();
worksheet.Range["A1"].Text = $"Tokenlist - {DateTime.Today.ToString("dd.MM.yyyy")}";
worksheet.Range["A1"].CellStyle = h1Style;
workbook.SaveAs(stream);
workbook.Close();
}
return stream;
}
我只发布了对文件有影响的代码,并且(也许)可能会产生错误。 没有错误,直到我打开文件,然后弹出这个异常:
Excel 无法打开文件“Tokenlist_22.05.2018.xlsx”,因为 文件格式或文件扩展名无效。确认文件有 未损坏且文件扩展名与 文件。
我尝试将文件格式更改为 .xls 和 .vbs,但都不起作用。使用 .xls 我可以打开文档,但里面没有数据。
.close() 没有太大变化,它只是关闭之前打开的输出流。
【问题讨论】:
-
如果保存工作簿服务器端,和客户端有什么区别?
-
尝试将扩展名重命名为 xls。如果这不起作用,输出到 csv 并检查工作表中的数据。
-
您想通过
MemoryStream对象SaveWorkbook,只是为了清楚一点?
标签: c# excel syncfusion