C# 生成的Excel文件:文件格式或文件扩展名无效

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)) {

我调用动作“导出”,在这里我传递一个viewmodels列表并定义格式

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
a
Workbook
,只是为了弄清楚?哇,谢谢!只需将列表转换为数组,就解决了问题。哇,谢谢!只需将列表转换为数组,就解决了这个问题。