1

我正在尝试修复其他人的代码,以从网站上的数据创建 Excel 文件。我们有数据,用户可以通过在网站上使用不同的复选框等来隐藏或显示其中的某些部分。一旦用户有了他们想要显示的内容,我们就可以选择将其导出到 excel 文件中。一切正常,直到文件被打开。打开文件时,报错:

您尝试打开的文件“filename.xls”的格式与文件扩展名指定的格式不同。在打开文件之前,请确认文件没有损坏并且来自受信任的来源。您现在要打开文件吗?

现在,如果单击“是”,文件仍会打开,并且数据的格式也很好。但是,我们希望此错误消失,因为它不是非常用户友好或看起来不干净。这是用于导出的代码:

        // perform export
        System.Web.HttpResponse objResponse = System.Web.HttpContext.Current.Response;
        objResponse.Clear();
        objResponse.Charset = "";
        objResponse.Buffer = true;
        objResponse.AddHeader("Content-Disposition", String.Format("attachment;filename={0}", "filename.xls"));
        objResponse.ContentType = "application/vnd.ms-excel";
        System.IO.StringWriter objStringWriter = new System.IO.StringWriter();
        System.Web.UI.HtmlTextWriter objHTMLWriter = new System.Web.UI.HtmlTextWriter(objStringWriter);
        m_objDataTable.RenderControl(objHTMLWriter);
        objResponse.Write(objStringWriter);
        objResponse.End();

任何帮助将非常感激。

4

1 回答 1

0

我相信第一步是在纯文本编辑器中查看生成的文件,以确定输出的内容。
XLS 扩展不支持压缩,即 XLSX。
XLS 扩展确实支持 HTML(非常慢)、制表符分隔的数据(快得多)和原生 Excel 电子表格。
快速查看应该会告诉您正在输出什么。
个人偏好是仅制表符分隔的文本或逗号分隔的 csv,具体取决于数据中的内容。
由于您使用的是 Excel 对象,我怀疑输出将在本机 Excel 中,但 HTMLTextWriter 告诉我它正在作为表格输出。以文本形式查看它可以判断您是否拥有有效的 HTML 或 Excel 文件或两者的混合。
编辑下一个技巧是将扩展名更改为 HTML 并在浏览器中打开它。如果有错误,它应该在数据中显示明显的故障。如果数据包含 HTML,则 HTML 格式效果不佳。
制表符分隔的输出将正确处理 HTML,但必须将所有制表符更改为空格,并且 CSV 不能很好地处理复杂的字符串。
我已经 10 多年没有对 XLS 进行本地导出,那是因为我想向单元格添加计算。(在 VB6 中)

于 2013-07-10T15:33:40.653 回答