在Microsoft的安全更新

时间:2016-08-24 14:17:26

标签: c# asp.net

我已使用下面的C#代码通过GridView将表值导出到excel文件。

Response.ContentType = "application/vnd.xls";

Response.AddHeader("content-disposition","attachment;filename="+filename+".xls");

直到最近Microsoft的安全更新[microsoft excel 2010 kb3115322的安全更新]才能正常运行。

更新后,我无法查看Excel文件的内容。它显示空白excel。

卸载更新后,我可以查看Excel,但我需要一个通过C#代码的解决方案。

提前致谢。

2 个答案:

答案 0 :(得分:2)

是的,由于Microsoft新的安全更新问题正在上升到当前的excel文件格式。因此,为了解决和快速解决方案,您应该使用csv(逗号分隔文件)而不是xls,因此excel应用程序将打开csv by','分隔符。

注意:我在我的Php应用程序中遇到了这个问题,并且通过使用PHPExcel库创建xls文件解决了这个问题。我希望您也可以找到类似PHPExcel for C#的内容。

感谢。随意评论。

答案 1 :(得分:1)

我遇到了同样的问题。我的解决方案是使用ExcelPack重写所有Excel导出。我使用XLSX而不再使用XLS。

以防重写是您的选择。

https://excelpackage.codeplex.com/

ExcelPackage package = new ExcelPackage();
ExcelWorksheet ws = package.Workbook.Worksheets[1];

//header
ws.Cells[1, 1].Value = "Column1";
ws.Cells[1, 2].Value = "Column2";
ws.Cells[1, 3].Value = "Column3";
ws.Cells[1, 4].Value = "Column4";
ws.Cells[1, 5].Value = "Column5";

//content
int i = 1;

foreach (Item item in list)
{
    i++;

    ws.Cells[i, 1].Value = item.Prop1;
    ws.Cells[i, 2].Value = item.Prop2;
    // format datetime
    ws.Cells[i, 3].Value = item.Prop3.ToString("yyyy-MM-dd");
    ws.Cells[i, 4].Value = item.Prop4;
    ws.Cells[i, 5].Value = item.Prop5;
}

using (var memoryStream = new MemoryStream())
{
    response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
    response.AddHeader("content-disposition", $"attachment; filename=Filename.xlsx");
    package.SaveAs(memoryStream);
    memoryStream.WriteTo(response.OutputStream);
    response.Flush();
    response.End();
}