打开生成的excel文件时发生错误 – “filename.xls”的格式与文件扩展名指定的格式不同

我正在生成一个Excel文件使用SQL查询和此代码 –

header("Content-type: application/octet-stream"); header("Content-Disposition: attachment; filename=excelfile.xls"); 

但是,当用户生成Excel并下载并试图打开文件,他们得到这个错误 –

 "The file you are trying to open, 'filename.xls', is in a different format than specified by the file extension. Verify that the file is not corrupted and is from a trusted source before opening the file. Do you want to open the file now?" 

并点击Yes的文件打开没有任何问题。

我怎样才能摆脱这个问题,而不打扰用户?

我已经阅读了这个论坛的其他线程,但他们不清楚或似乎没有工作。

像改变扩展到xlsx不起作用

谁能帮忙?

你可以从这里下载excel生成文件的样本

你有可能用逗号分隔符来生成文件吗? 如“A”,“B”,“C”….当你写出一个真正的.csv文件并将其称为xls文件时,我得到了同样的错误信息。

Excel可以打开这些文件,但最终用户将不得不做一个“另存为”真正的Excel格式。

如果你不想要这个错误,那么你必须使用一个更复杂的库来编写excel头文件。 在这里看到更多的信息

编辑:我看着你的文件。 Excel是正确的,这不是一个Excel文件。 正如其他人指出,编写标签分隔的数据,并将其称为一个.xls不会改变头文件的遗漏,真正使其成为一个excel文件。

本文向您展示了如何以xml样式格式编写一个excel文件。 你可以从代码中看到,还有很多额外的事情要做。 你将不得不相应地修改你的pl / sql代码。

我在使用PL / SQL写入一个.csv文件时遇到了这个问题,直到我把我的头文件中的每个字段用“像这样:

header_line:='“姓氏”'|| ','|| ''名字''|| ','|| '“date'”; UTL_FILE.PUT_LINE(outhandle,header_line);