Excel无法打开文件,因为文件格式或文件扩展名无效。确认文件未损坏

时间:2018-12-14 06:09:34

标签: c# excel

我正在尝试以xlsxxls 格式导出到excel,但是在尝试打开文件时出现此错误。 Excel无法打开文件 'tms.xlsx',因为文件格式或文件扩展名无效。确认文件未损坏,并且文件扩展名与文件格式匹配。

public static void ExportToExcel(object allLists, string fileName, string driverName)
        {
            try
            {

                grid.DataSource = allLists;
                grid.DataBind();
                RowCreated();
                Header(fileName, driverName);
                HttpContext.Current.Response.ClearContent();
                string FileName = String.Format(fileName + "-{0}", DateTime.Now.ToString("dd/MMM/yyyy"));               
                HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
                HttpContext.Current.Response.AddHeader("content-disposition", "attachment; filename=" + FileName + ".xls");
                StringWriter sw = new StringWriter();
                HtmlTextWriter htw = new HtmlTextWriter(sw);
                //Applying style to grid view header cells


                for (int  i = 0; i < grid.Rows.Count; i++)
                {
                    for (int J = 0; J < grid.HeaderRow.Cells.Count; J++)
                    {
                        if ((grid.Rows[i].Cells[J].Text.Contains("-y@llow")))
                        {
                            grid.Rows[i].Cells[J].BackColor = System.Drawing.Color.FromArgb(255, 255, 179);
                            var val = Convert.ToString(grid.Rows[i].Cells[J].Text);
                            if (val != null && val != "")
                            {
                                if (val.Contains("-y@llow"))
                                {
                                    val = val.Replace("-y@llow", "");
                                    grid.Rows[i].Cells[J].Text =Convert.ToString(val);
                                }
                            }
                        }
                        else if((grid.Rows[i].Cells[J].Text.Contains("-gr@en")))
                           
                        {
                            grid.Rows[i].Cells[J].BackColor = System.Drawing.Color.FromArgb(159, 223, 159);
                            var val =Convert.ToString(grid.Rows[i].Cells[J].Text);
                            if (val != null && val != "")
                            {
                                if (val.Contains("-gr@en"))
                                {
                                    val = val.Replace("-gr@en", "");
                                    grid.Rows[i].Cells[J].Text = Convert.ToString(val);
                                }
                            }
                            
                        }
                    }
                }
                for (int i = 0; i < grid.HeaderRow.Cells.Count; i++)
                {

                    grid.HeaderRow.Cells[i].Style.Add("background-color", "#337ab7");
                    grid.HeaderRow.Cells[i].Style.Add("color", "white");
                  
                }

                grid.RenderControl(htw);
                HttpContext.Current.Response.Write(sw.ToString());
                HttpContext.Current.Response.End();
            }
            catch (Exception)
            {
                //Response.End() will generate exception so, do not throw the exception here.
                //Response.Write(Ex.StackTrace);
            }
        }

1 个答案:

答案 0 :(得分:0)

请检查内容类型和扩展名。您目前有.xlsapplication/vnd.ms-excel。所述xlsx需要相应的扩展名和

ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"`

要添加一些上下文,我在返回ActionResult

的控制器方法中按以下方式使用它
ActionResult ExportAsExcel(object input)
{
    var fileData = ExcelExport.CreateExcelContent(input);

    if (fileData == null || fileData.Length == 0)
    {
        ViewData["Message"] = "Could not create export file";
        View("Error");
    }

    // File is of type Controller.File
    return File(fileData, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "export.xlsx");
}