我正在尝试修复其他人的代码,从网站上的数据创建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();
非常感谢任何帮助。
答案 0 :(得分:0)
我认为第一步是在纯文本编辑器中查看生成的文件,以确定输出的内容。
XLS扩展不支持压缩,即XLSX
XLS扩展支持HTML(极慢),制表符分隔数据(更快)和本机Excel电子表格。
快速查看应该告诉您输出的内容
个人偏好是制表符分隔文本或逗号分隔csv,具体取决于数据中的内容
由于您正在使用Excel对象,我怀疑输出将在本机Excel中,但HTMLTextWriter告诉我它正在作为表输出。将其视为文本将告诉您是否具有有效的HTML或Excel文件或两者的混合。
编辑下一个技巧是将扩展名更改为HTML并在浏览器中打开它。如果数据有错误,它应该在数据中显示可见的故障。如果数据包含HTML,则HTML格式不会很好
制表符分隔输出将正确处理HTML,但所有选项卡必须更改为空格,CSV不能很好地处理复杂的字符串。
十多年来我没有对XLS进行本地导出,这是因为我想在单元格中添加计算。 (这是在VB6中)