Мне нужно сделать экспорт данных в файл Excel, я думал это так просто :)
Я использую библиотеку PhpSpreadsheet (https://github.com/PHPOffice/PhpSpreadsheet)
Я пытаюсь использовать образцы PhpSpreadsheet и делать простые вещи:
Есть мой код:
require_once $this->config->application->libraryDir . 'PhpSpreadsheet-master/vendor/autoload.php';
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue('A1', 'Hello World !');
$writer = new Xlsx($spreadsheet);
$fileName = 'export/hello_world.xlsx';
$writer->save($fileName);
// header('Location: '.$fileName);
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename = "'.$fileName.'"');
header('Cache-Control: max-age=0');
$writer->save('php://output');
Результат: файл был создан в папке «Экспорт», я могу открыть его с помощью Windows. Но когда файл загружается в папку загрузок по умолчанию, я не могу его открыть. У меня есть эта ошибка: Excel обнаружил нечитаемое содержимое
У вас есть идея, почему эта проблема?
@Gallyamov это тот же файл ... я не понимаю
Можно ли использовать header('Content-Type: application/vnd.ms-excel'); вместо своего? И попробуйте сначала удалить $writer->save($fileName); (только для теста)
если я удалю $writer->save($fileName); невозможно будет открыть несуществующий файл
Попробуйте exitпогуглить после $writer->.save('php://output')?
Перед тем, как header(...)s, попробуйте exiting убедиться, что выхода нет.
И поскольку вы знаете, что $writer->save($fileName) работает, вы можете попробовать вместо того, чтобы звонить $writer->save('php://output'), вы можете сделать $writer->save($fileName); header(...); echo file_get_contents($fileName); Пробовать разные типы контента тоже может быть полезно.
@Reed работает с exit(); .... Спасибо
@ user1450740, я разместил свои комментарии в качестве ответа, так как один из них сделал это. Рад, что вы смогли заставить его работать






Попробуйте exitпогуглить после $writer->.save('php://output'). Для устранения неполадок перед header(...) попробуйте exiting, чтобы убедиться, что выход отсутствует.
И поскольку вы знаете, что $writer->save($fileName) работает, вы можете попробовать вместо того, чтобы звонить $writer->save('php://output'), вы можете сделать $writer->save($fileName); header(...); echo file_get_contents($fileName); Пробовать разные типы контента тоже может быть полезно.
Может быть, есть какая-то разница в этих двух файлах? Я бы сравнил размер этих файлов в байтах как самый простой способ.