Почему Phpspreadsheet создает поврежденный файл?

Установил на сервер библиотеку Phpspreadsheet. Использую тестовый код из документации:

require 'vendor/autoload.php';

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

$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue('A1', 'Hello World !');

$writer = new Xlsx($spreadsheet);
$writer->save('report.xlsx');

После запуска скрипта файл на сервере создается, но при открытии в MS Office (Libre Office) получаю сообщение о том, что фал поврежден. Попытка восстановления не удается. Файл невозможно открыть. При этом формат CSV работает без проблем. Библиотеку устанавливал через Composer. Ошибок при установке не было. Версия библиотеки -- 1.14. Версия PHP -- 7.3, все необходимые расширения установлены.

Кто-нибудь сталкивался с подобной проблемой?


Ответы (1 шт):

Автор решения: Meow

Ничего не обещаю, но попробуйте почистить/отключить буфер вывода перед сохранением.

use PhpOffice\PhpSpreadsheet\IOFactory;

// Логика создания Вашей таблицы

ob_end_clean();
$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
$writer->save(__DIR__ . '/report.xlsx');
exit();

Другие решения https://github.com/PHPOffice/PhpSpreadsheet/issues/217#issuecomment-422810148

→ Ссылка