【问题标题】:Excel cannot open the file because the file format or file extension is not valid - download excel through phpExcel无法打开文件,因为文件格式或文件扩展名无效-通过php下载excel
【发布时间】:2017-01-23 02:11:07
【问题描述】:

这个问题有多种变体。不幸的是,他们无法帮助我。

以下代码运行良好(使用 slim)。如果不使用 slim,则为用户 header()。

    $response = $res->withHeader('Content-Description', 'My File transfer')
     ->withHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
     ->withHeader('Content-Disposition', 'attachment;filename="'.basename($filePath).'"')
     ->withHeader('Expires', '0')
     ->withHeader('Content-Transfer-Encoding', 'binary')
     ->withHeader('Cache-Control', 'must-revalidate')
     ->withHeader('Pragma', 'public')
     ->withHeader('Content-Length', filesize($filePath));

    readfile($filePath);

我尝试了其他答案中的 ob_start、flush、end 组合,但没有任何帮助。

我能够在服务器上打开文件,但是当我通过上述代码下载后尝试打开它时 Excel 无法打开它 - Excel 无法打开文件,因为文件格式或文件扩展名无效。

【问题讨论】:

    标签: php excel


    【解决方案1】:

    以十六进制打开文件(源文件和下载文件)以查找任何明显的差异。

    在我的例子中,它是一个前导 0d0a(换行和回车)

    这是在 ?> 之后换行而来的(php 关闭标签)!!!我在 ?> 之后删除了新行,我可以让它工作(可以打开文件)

    我希望它对某人有所帮助。刚刚花了 3 个小时搞清楚。

    【讨论】:

    • 但是换行符是如何进入文件的?这并没有告诉你如何修复代码只是如何找到问题
    • 很抱歉,如果答案不清楚。代码流包括其他依赖的 php 文件。其中一个文件在 ?> 之后有一个新行(手动错误)。发送二进制输出时,这条新行引起了问题。它适用于 json,因为新行在 json 解析器上被忽略。我必须找到在 ?> 之后有新行的文件并将其删除以解决问题。许多答案都建议使用 ob_clean ,但这也没有解决问题。所以我的结论是,代码修复在这种情况下无济于事,它是语法。
    猜你喜欢
    • 2022-06-30
    • 1970-01-01
    • 1970-01-01
    • 2023-01-19
    • 1970-01-01
    • 2020-07-11
    • 1970-01-01
    • 2012-12-24
    • 1970-01-01
    相关资源
    最近更新 更多