我在控制器和 MVC 4 应用程序中有以下代码
Response.AddHeader("Content-Disposition", "attachment; filename=export.xml");
Response.AddHeader("Content-type", "vnd.openxmlformats-officedocument.spreadsheetml.sheet");
var rows = data.Split('\n');
var sheet = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" + Environment.NewLine;
sheet += "<?mso-application progid=\"Excel.Sheet\"?>" + Environment.NewLine;
sheet += "<ss:Workbook xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\" xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:x=\"urn:schemas-microsoft-com:office:excel\" xmlns:html=\"http://www.w3.org/tr/rec-html40\">" + Environment.NewLine;
sheet += "<ss:Worksheet ss:Name=\"Sheet1\">" + Environment.NewLine;
sheet += "<ss:Table>" + Environment.NewLine;
foreach (var r in rows)
{
sheet += "<ss:Row>" + Environment.NewLine;
var columns = r.Split(',');
foreach (var column in columns)
{
sheet += "<ss:Cell>" + Environment.NewLine;
sheet += "<ss:Data ss:Type=\"String\">" + column + "</ss:Data>" + Environment.NewLine;
sheet += "</ss:Cell>" + Environment.NewLine;
}
sheet += "</ss:Row>" + Environment.NewLine;
}
sheet += "</ss:Table>" + Environment.NewLine;
sheet += "</ss:Worksheet>" + Environment.NewLine;
sheet += "</ss:Workbook>" + Environment.NewLine;
return Content(sheet);
如果我放置一个断点并将工作表变量的值复制到记事本中并将其保存在我的机器上本地作为 export.xml 我可以打开该文件并且它没有问题。
我遇到的问题是,当我让控制器中的此方法继续运行时,我会在浏览器中收到提示以打开文件,这是我所期望的,但是当我单击打开时,excel会打开,然后出现错误信息。我得到的错误信息是
Microsoft Excel 无法打开或保存更多文档,因为没有足够的可用内存或磁盘空间。
我缺少什么让这个控制器将正确的信息传递回浏览器。