生成的Excel文件改为以XML格式下载

时间:2018-07-23 18:28:29

标签: php xml excel

我正在生成并使用以下示例XML来生成和下载XLSX文件。

<!--?xml version="1.0"?-->
<!--?mso-application progid="Excel.Sheet"?-->
<ss:workbook xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
    <ss:worksheet ss:name="Title">
        <ss:table>
            <ss:column>
                <ss:row>
                    <ss:cell><ss:data ss:type="String">Something</ss:data></ss:cell>
                    <ss:cell><ss:data ss:type="String">Something</ss:data></ss:cell>
                </ss:row>
            </ss:column>
        </ss:table>
    </ss:worksheet>
</ss:workbook>

然后,我使用以下代码片段强制文件下载。

<?php
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=something.xml ");
header("Content-Transfer-Encoding: binary ");
print $this->file;
?>

文件下载正确;但是,扩展名是XML。我可以在Excel中手动将其打开,它将正确显示。我尝试将filename行中的Content-Disposition更改为something.xlsx,但是当我尝试通过双击打开文件时,出现警告:

  

Excel无法打开something.xlsx文件,因为文件格式为   文件扩展名无效。验证文件尚未   损坏,并且文件扩展名与文件格式匹配。

知道我在做什么错吗? XML格式不正确吗?

1 个答案:

答案 0 :(得分:1)

您只需设置一次Content-Type,并将其设置为正确的值:

<?php
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
header("Content-Disposition: attachment;filename=something.xlsx");
header("Content-Transfer-Encoding: binary");
echo $this->file;

最好也不要拖尾?>,以免杂散的空格进入下载的文件中。