【问题标题】:File Format and Extension does not match in ExcelExcel 中的文件格式和扩展名不匹配
【发布时间】:2020-06-07 06:31:15
【问题描述】:

使用以下代码将 MySQL 数据导出到 Excel 文件:

$i = 0;
        while($row=$stmt->fetch(PDO::FETCH_ASSOC))
        {
            $rowData = '';  
    foreach ($row as $value) {  
        $value = '"' . $value . '"' . "\t";  
        $rowData .= $value;  
    }  
    $setData .= trim($rowData) . "\n";
            $i++;

        }
$filename = $i." numbers ".date('d m Y') . ".xls";
header("Content-Type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=\"$filename\"");
header("Pragma: no-cache");  
header("Expires: 0");
    echo ucwords($columnHeader) . "\n" . $setData . "\n";   

成功导出文件,也可以正确打开,但是在打开文件之前有一个对话框。

当我使用扩展名xlsx时,文件打不开并给出一个对话框:

为什么会出现以及如何删除它?

【问题讨论】:

  • 如果您的值都不包含双引号字符“您可以将制表符分隔符更改为逗号,并将文件扩展名更改为“.csv”格式。.xls 和 .xlsx 文件不是二进制文件纯文本。

标签: php mysql excel xlsx xls


【解决方案1】:

您的行分隔符有误,请改用 \r\n

    $i = 0;
    while($row=$stmt->fetch(PDO::FETCH_ASSOC))
    {
        $rowData = '';  
        foreach ($row as $value) {  
             $value = '"' . $value . '"' . "\t";  
             $rowData .= $value;  
        }  
     $setData .= trim($rowData) . "\r\n";
     $i++;

    }

如果你愿意,你可以试试

implode("\t", array_values($row)) 。 "\r\n";

要让你完整的 rowData 添加到 setData,php 有很多功能需要探索

喜欢implodearray_value

另一个想法是,你应该在使用你的选择结果之前添加一个标题行。

【讨论】:

  • 但对话框还在。
  • 请发布您收到的文件的样本,不要在文件名中使用空格。
  • 我看到问题 xls 是二进制格式。 xslx 是基于 xml 的格式,但您有一个 csv 文件。所以将结尾更改为 csv 并且至少它会打开文件,但他仍然不喜欢将选项卡作为分隔符,您只能在 umport 时使用它。当您构建文本文件时,请务必查看 pspad 或 notpad++ 等文本编辑器以查看您生成的内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-03
  • 1970-01-01
  • 2019-01-27
  • 2016-10-14
  • 2013-10-16
  • 1970-01-01
相关资源
最近更新 更多