C# 生成的Excel文件:文件格式或文件扩展名无效
我调用动作“导出”,在这里我传递一个viewmodels列表并定义格式C# 生成的Excel文件:文件格式或文件扩展名无效,c#,excel,syncfusion,C#,Excel,Syncfusion,我调用动作“导出”,在这里我传递一个viewmodels列表并定义格式 public ActionResult DownloadTokenlist(string startDate = null, string endDate = null) { using (HRCTSStatisticDb db = new HRCTSStatisticDb(Setting.ClientId)) {
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");
}
}
public ActionResult DownloadTokenlist(字符串startDate=null,字符串endDate=null)
{
使用(HRCTSStatisticDb=newhrctsstatisticdb(Setting.ClientId))
{
List tokenExportViewModels=新列表();
Response.AddHeader(“content disposition”,$”附件;filename=Tokenlist_u{DateTime.Now.ToString(“dd.MM.yyyy”)}.xlsx);
InfoFormat($“{new homecontroler().UserRole(Context.LoggedInUser)}:{Context.LoggedInUser}已经使用了exceldownload”);
返回文件(新的ExcelExport().Export(tokenExportViewModels),“application/vnd.openxmlformats of icedocument.spreadsheetml.sheet”);
}
}
我调用的操作(ExcelEngine由Syncfusion执行):
公共内存流导出(列表)
{
MemoryStream stream=新的MemoryStream();
使用(ExcelEngine=new ExcelEngine())
{
iaapplication application=excelEngine.Excel;
application.DefaultVersion=ExcelVersion.Excel2010;
IWorkbook工作簿=application.Workbooks.Create(1);
i工作表工作表=工作簿.工作表.创建(“标记列表”);
IStyle defaultStyle=workbook.Styles.Add(“默认”);
defaultStyle.Font.Size=12;
工作表.SetDefaultColumnStyle(1,20,defaultStyle);
工作表.SetDefaultRowStyle(1300,defaultStyle);
worksheet.UsedRange.AutofitColumns();
worksheet.Range[“A1”].Text=$“Tokenlist-{DateTime.Today.ToString(“dd.MM.yyyy”)}”;
工作表。范围[“A1”]。单元格样式=H1样式;
工作簿.SaveAs(流);
workbook.Close();
}
回流;
}
我只发布了对文件有影响的代码,可能会产生错误。
没有错误,直到我打开文件,才会弹出此异常:
Excel无法打开文件“Tokenlist_22.05.2018.xlsx”,因为
文件格式或文件扩展名无效。验证该文件是否已被删除
未损坏,且文件扩展名与的格式匹配
档案
我尝试将文件格式更改为.xls和.vbs,但两者都不起作用。使用.xls,我可以打开文档,但文档中没有数据
.close()没有太大变化,它只是关闭了以前打开的输出流。使用FileContentResult,您可以像这样提供fileDownloadName
:
return File(excelExport.Export(tokenExportViewModels).ToArray(),"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", $"Tokenlist_{DateTime.Now.ToString("dd.MM.yyyy")}.xlsx");
并使用流扩展返回一个字节[]
(我假设您的导出
方法正在生成有效文档)使用FileContentResult,您可以这样提供文件下载名
:
return File(excelExport.Export(tokenExportViewModels).ToArray(),"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", $"Tokenlist_{DateTime.Now.ToString("dd.MM.yyyy")}.xlsx");
并使用流扩展返回一个字节[]
(我假设您的导出方法正在生成有效文档)当流在返回时到达结束位置时,下载的文件正在损坏。因此,建议将其当前位置设置为0以解决此问题。请参考下面的代码以实现相同的效果 代码示例:
workbook.SaveAs(stream);
workbook.Close();
stream.Position = 0;
我们还分享了一个简单的示例供您参考,可以从以下链接下载
示例链接:
我为Syncfusion工作。当流在返回时到达结束位置时,下载的文件正在损坏。因此,建议将其当前位置设置为0以解决此问题。请参考下面的代码以实现相同的效果 代码示例:
workbook.SaveAs(stream);
workbook.Close();
stream.Position = 0;
我们还分享了一个简单的示例供您参考,可以从以下链接下载
示例链接:
我为Syncfusion工作。如果保存工作簿服务器端和客户端,有什么区别?请尝试将扩展名重命名为xls。如果不起作用,请输出到csv并检查工作表中的数据。您正试图通过
MemoryStream
对象保存工作簿
,只是为了澄清一下?如果保存工作簿服务器端和客户端,有什么区别?请尝试将扩展名重命名为xls。如果不起作用,请输出到csv并检查工作表中的数据。您正试图通过MemoryStream
对象Save
aWorkbook
,只是为了弄清楚?哇,谢谢!只需将列表转换为数组,就解决了问题。哇,谢谢!只需将列表转换为数组,就解决了这个问题。