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

Posted

技术标签:

【中文标题】生成的 Excel 文件以 XML 格式下载【英文标题】:Generated Excel file is downloaded as XML instead 【发布时间】:2018-12-31 06:44:28 【问题描述】:

我正在生成并使用以下示例 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>

然后我使用下面的代码 sn-p 来强制下载文件。

<?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 中手动打开它,它会正确显示。我尝试将Content-Disposition 行中的filename 更改为something.xlsx,但是当我尝试通过双击打开文件时,我收到一条警告:

Excel 无法打开文件 something.xlsx,因为文件格式或 文件扩展名无效。确认该文件未被 已损坏且文件扩展名与文件格式匹配。

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

【问题讨论】:

***.com/questions/8166205/… 【参考方案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;

最好不要尾随?&gt;,这样下载的文件中就不会出现杂散的空白。

【讨论】:

以上是关于生成的 Excel 文件以 XML 格式下载的主要内容,如果未能解决你的问题,请参考以下文章

通过XML转换下载.xlsx格式的excel文件

JAVA 生成xml格式,具体格式如下,请问JAVA方法怎么写

JAVA 生成xml格式,具体格式如下,请问JAVA方法怎么写

Java 将Excel转为UOS

怎么用xmlspy将xml文档生成xsd文件

如何将xml文件转换成excel电子数据表