我需要创建并优化文件并从aspx页面下载。我创建了一个简单的页面(default.aspx),上面有一个按钮(" Button1")。这是default.aspx.cs文件
using System;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
string content = "";
content += "<head>";
content += "</head>";
content += "<body>";
content += "<table>";
content += "<tr>";
content += "<th>foo</th>";
content += "</tr>";
content += "</table>";
content += "</body>";
content += "</html>";
Response.AppendHeader("Content-Type", "application/vnd.ms-excel");
Response.AppendHeader("Content-disposition", "attachment; filename=test.xls");
Response.Write(content);
}
}
当我运行此代码并单击按钮时,它确实生成了带有测试的Excel文件&#34; foo&#34;在单元格A1中。问题是我从IE收到以下错误消息:
我做错了什么?我如何生成文件,以便它不会导致显示错误消息?
答案 0 :(得分:1)
HTML不是Excel工作簿。
当Excel打开文件时,它不考虑或信任文件扩展名,因为它可以由用户任意更改 - 而是打开任何文件并查找某些模式(例如,Excel 2007+ OOXML文件以字符开头PK
.CSV文件定期使用逗号,旧的Excel文件有自己的二进制格式和“魔术字”等。
在您的情况下,Excel正在打开文件,将其检测为HTML,并将其作为HTML表格读取并将其转换为电子表格。您的代码实际上并没有发送“真正的”Excel工作簿 - 因此您的MIME类型完全不正确。
如果你想要总是“正常工作”的东西,我建议让用户以CSV格式下载数据,这样可以在Microsoft Excel,Apple Numbers,OpenOffice Calc和Good ol'中实现跨平台和可打开的优势。记事本。请务必将其作为text/csv
投放。
答案 1 :(得分:0)
您不能将Excel文件隐式创建为HTTP响应。你基本上有两个选择:
如果您选择第一个选项,则在Excel中打开文件时,您将继续弹出此选项。但是,该文件将在Excel中打开。
第二种选择可能会花钱。我曾经为一家名为SoftArtisans的公司工作,该公司编写了一个名为ExcelWriter的API,可以满足您的需求:
http://www.officewriter.com/officewriter-free-evaluation.aspx
他们的主要竞争对手是Aspose,其产品名为Aspose.Cells。我没有亲自使用它,但他们有自己的忠实客户,所以我认为产品很好: