phpSpreadsheet损坏的xlsx文件

时间:2019-08-30 16:27:38

标签: php xlsx xls phpspreadsheet

尝试下载xlsx文件时出现问题。当我在本地对其进行测试时,它工作得很好,但是当我将其上传到生产服务器时,文件已损坏。

这是文件输出: enter image description here

这是我正在使用的代码:

<?php

    require 'conn.php';
    require 'vendor/autoload.php';

    use PhpOffice\PhpSpreadsheet\Spreadsheet;
    use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
    use PhpOffice\PhpSpreadsheet\IOFactory;


    $spreadsheet = new Spreadsheet();
    $sheet = $spreadsheet->getActiveSheet();
    $sheet->setCellValue('A1', '#');
    $sheet->setCellValue('B1', 'First');
    $sheet->setCellValue('C1', 'Last');
    $sheet->setCellValue('D1', 'Handle');

    header('Content-Type: application/vnd.openxmlformats- 
    officedocument.spreadsheetml.sheet');
    header('Content-Disposition: attachment;filename="text.xlsx"');
    header('Cache-Control: max-age=0');
    $writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
    $writer->save('php://output');
    die;

我尝试将标头更改为,但没有帮助:

header('Content-type:application / vnd.ms-excel');

2 个答案:

答案 0 :(得分:1)

如果在调用createWriter静态方法之前添加输出缓冲区的清理,我认为可以。

<script language="JavaScript">
window.onbeforeunload = WindowCloseHanlder;
function WindowCloseHanlder()
{   
window.alert('My Window is closing');
}
</script>

答案 1 :(得分:0)

我有相同的症状,这是因为网络服务器这样做后仍继续输出东西

$writer->save('php://output');

就我而言,在问题发生后只进行die()是可行的。 也许可以节省一些时间。