2017-02-15 19 views
1

Я использую последнюю библиотеку PHPExcel для создания .xls, .xlsx файлов. При попытке вывода созданного файла, как это:PHPExcel excel2007 php output с диаграммами

ob_end_clean(); 

$file = 'test.xls'; 
header('Content-Type: application/vnd.ms-excel; charset=UTF-8'); 
header('Content-Disposition: attachment; filename="'.$file.'"'); 
header('Cache-Control: max-age=0'); 
header('Cache-Control: max-age=1'); 

$objPHPWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); 
$objPHPWriter->setIncludeCharts(TRUE); 
$objPHPWriter->save('php://output'); 
exit; 

все хорошо, пока я пытаюсь создать и вывести любой charts. Поэтому я изменил свой код в соответствии с примером:

ob_end_clean(); 

$objPHPWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 
$objPHPWriter->setIncludeCharts(TRUE); 
$objPHPWriter->save(str_replace('.php', '.xlsx', __FILE__)); 
exit; 

Это работает, но файл не загружен. Так я модифицированный код для вывода созданного файла:

ob_end_clean(); 

$file = 'test.xlsx'; 
header('Content-Type: Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=UTF-8'); 
header('Content-Disposition: attachment; filename="'.$file.'"'); 
header('Cache-Control: max-age=0'); 
header('Cache-Control: max-age=1'); 

$objPHPWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 
$objPHPWriter->setIncludeCharts(TRUE); 
$objPHPWriter->save('php://output'); 
exit; 

И это не работает, заканчивается ERR_INVALID_RESPONSE.

Также, когда я храню файл excel с диаграммами со вторым блоком кода, он не совместим с MS Excel 2016. В нем говорится, что файл поврежден, и данные были заменены или удалены. Что мне не хватает? Большое спасибо.

+1

'И это не работает.' Это означает, что именно? Он отображает сообщения об ошибках? Он создает поврежденный файл? Это заставляет сервер съесть вашего домашнего хомяка? –

+0

Excel5 Writer не поддерживает диаграммы, поэтому ваш первый пример не будет содержать никаких диаграмм вообще –

+0

Если вы вручную загрузите объявление, откройте файл с MS Excel во втором примере, что произойдет? –

ответ

0

Я выяснил одно простое решение, первый шаг - сохранить созданный файл .xlsx, второй - загрузить файл с header("Location:"). Резервные файлы удаляются с помощью функции array_map.

array_map('unlink', glob(__DIR__."/*.xlsx")); 

$file = 'test.xlsx'; 
$objPHPWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 
$objPHPWriter->setIncludeCharts(TRUE); 
$objPHPWriter->save($file); 
header("Location: $file");