代码之家  ›  专栏  ›  技术社区  ›  farjam

生成的Excel文件下载为XML

  •  0
  • farjam  · 技术社区  · 7 年前

    我正在生成并使用下面的示例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 回复  |  直到 7 年前
        1
  •  1
  •   miken32 Amit D    7 年前

    您只需要设置一次内容类型,并且应该将其设置为正确的值:

    <?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;
    

    最好不要拖尾 ?> 这样就不会有多余的空白进入下载的文件。

    推荐文章