C# 在Visual Studio中使用C创建xls文件时遇到问题#

C# 在Visual Studio中使用C创建xls文件时遇到问题#,c#,excel,visual-studio-2012,C#,Excel,Visual Studio 2012,我正在尝试修复其他人从网站上的数据创建Excel文件时的代码。我们已经准备好了数据,用户可以通过使用不同的复选框在网站上隐藏或显示数据的某些部分。一旦用户显示了他们想要的内容,我们就可以选择将其导出到excel文件。在文件打开之前,一切都正常工作。打开文件时,出现以下错误: 您试图打开的文件“filename.xls”的格式与文件扩展名指定的格式不同。打开文件之前,请确认文件未损坏且来源可靠。您想现在打开该文件吗 现在,如果单击“是”,文件仍然会打开,并且数据的格式很好。然而,我们希望这个错误消

我正在尝试修复其他人从网站上的数据创建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();

任何帮助都将不胜感激。

我认为第一步是在纯文本编辑器中查看生成的文件,以了解输出的内容。
XLS扩展不支持压缩,即XLSX。
XLS扩展支持HTML(速度非常慢)、制表符分隔的数据(速度更快)和本机Excel电子表格。
快速查看可以告诉您输出的内容。
个人首选项为仅制表符分隔的文本或逗号分隔的csv,具体取决于数据中的内容。
由于您使用的是Excel对象,我怀疑输出将是原生Excel,但HTMLTextWriter告诉我它是作为表输出的。将其视为文本将告诉您是否有有效的HTML或Excel文件,或者两者的混合。
编辑下一个技巧是将扩展名更改为HTML并在浏览器中打开它。如果有错误,它应该显示数据中的可见故障。如果数据包含HTML,则HTML格式效果不佳。
以制表符分隔的输出将正确处理HTML,但所有制表符都必须更改为空格,并且CSV不能很好地处理复杂字符串。

我已经10多年没有对XLS进行本机导出了,这是因为我想在单元格中添加计算。(在VB6中)

excel的哪个版本?您可能需要使用xlsx文件扩展名。那么,您只是将DataTable控件直接呈现给HtmlTextWriter?这将是问题的一部分。Excel知道如何像您正在创建的那样显示文档,但它总是会警告您,因为它不是本机Excel文件。您必须实际创建一个适当的Excel文档,无论是通过互操作还是其他机制来消除该错误。我尝试过使用xlsx扩展名,但是错误也会弹出,甚至不允许我打开文件。是的,我意识到这样做并不是创建原生excel文档。然而,我希望有一个解决办法。编写代码的人一周内不会回来,我也不想重写整个程序。您可能可以将其保存为CSV文件(纯文本)并避免文件类型不匹配。使用CSV扩展名确实可以避免文件类型不匹配,但它当然会将所有内容显示为纯文本。不幸的是,这使得数据非常难看和难以读取。在记事本中打开文件会发现它只是html文本。