【问题标题】:C# Generated Excel File: File Format or File Extension is not validC# 生成的 Excel 文件:文件格式或文件扩展名无效
【发布时间】: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 对象Save Workbook,只是为了清楚一点?

标签: c# excel syncfusion


【解决方案1】:

当流返回时到达结束位置,下载的文件已损坏。因此,建议将其当前位置设置为 0 以解决此问题。请参考下面的代码来实现相同的目的。

代码示例:

            workbook.SaveAs(stream);
            workbook.Close();
            stream.Position = 0;

我们还分享了一个简单的示例供您参考,可以从以下链接下载。

示例链接:http://www.syncfusion.com/downloads/support/directtrac/general/ze/Sample1020485770.zip

我为 Syncfusion 工作。

【讨论】:

    【解决方案2】:

    使用 FileContentResult Overload,您可以像这样提供fileDownloadName

    return File(excelExport.Export(tokenExportViewModels).ToArray(),"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", $"Tokenlist_{DateTime.Now.ToString("dd.MM.yyyy")}.xlsx");
    

    并使用流ToArray() 扩展返回byte[]

    (我假设您的 Export 方法正在生成有效文档)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-21
      • 1970-01-01
      • 1970-01-01
      • 2013-06-03
      • 2022-06-30
      • 2023-01-19
      • 2015-12-14
      相关资源
      最近更新 更多