Формат файла и расширение не совпадает в Excel - PullRequest
1 голос
/ 23 февраля 2020

Экспорт 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";   

Он успешно экспортирует файл и также открывается правильно, но перед его открытием открывается диалоговое окно.

Dialogue Box

Когда я использую расширение как xlsx, файл не открывается и выдает диалоговое окно:

Dialogue Box 2

Почему это происходит и как его убрать?

1 Ответ

0 голосов
/ 23 февраля 2020

У вас неправильные разделители для строки, используйте вместо этого \ 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 имеет множество функций для исследования

, таких как implode и array_value .

Другой способ заключается в том, что вам следует добавить строку заголовка перед использованием результата выбора.

...