8

在谷歌搜索时,我发现在输出以不同文件格式生成的 excel 时需要设置两组不同的标题。

例如

对于类型“Excel5”的标题是:

header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");;
header("Content-Disposition: attachment;filename=$filename");
header("Content-Transfer-Encoding: binary ");

对于“Excel2007”类型的标题是:

header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="myfile.xlsx"');
header('Cache-Control: max-age=0');

我的问题:是否需要为每种文件类型设置不同的标题,因为还有其他文件类型还有CSVHTMLPDF

4

1 回答 1

12
header("Pragma: public");

不——这是错误的——尽管很多人认为这与缓存有关

header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");

与 Excel 无关 - 这些只是控制缓存

header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");;

否 - 应该只有一个内容类型标头。对于使用 OLE 的 MS Excel 文件,mimetype 应为 application/vnd.ms-excel

只有上面的第二个标头是有效的 mime 类型。

header("Content-Disposition: attachment;filename=$filename");
header("Content-Transfer-Encoding: binary ");

第二个标题是多余的,前者指定了下载的文件名。

内容类型:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');

仅适用于 .xlsx 文件(即保存在 XML 中)。否则你应该使用 application/vnd.ms-excel。实际上后者应该是向后兼容的。

我的问题:是否需要为每种文件类型设置不同的标题

是 - Content-Type 标头文件类型。但只有这个标题需要改变。

C。

于 2010-04-08T12:06:20.947 回答