打开生成的excel文件时出错 - ' filename.xls',格式与文件扩展名指定的格式不同

时间:2015-03-24 18:24:30

标签: excel

我正在使用sql查询和此代码生成一个excel文件 -

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的扩展名不起作用

有人可以帮忙吗?

您可以从here

下载excel生成文件的示例

2 个答案:

答案 0 :(得分:0)

您是否有机会使用逗号分隔符生成文件?例如" A"," B"," C" .... 当您编写真正的.csv文件并将其称为xls文件时,我收到了同样的错误消息。

Excel可以打开这些文件,但最终用户必须执行"另存为"到真正的Excel格式。

如果您不想要错误,那么您必须使用更复杂的库来编写excel头文件。有关详细信息,请参阅here

编辑:我查看了你的文件。 Excel是正确的,这不是一个excel文件。正如其他人已经指出编写制表符分隔数据并调用它.xls并不会改变实际上使其成为excel文件的头文件的遗漏。

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

答案 1 :(得分:0)

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

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