alhimik1986 / php-excel-templator

PHP Spreadsheet extension to the export excel file from excel template
MIT License
344 stars 68 forks source link

[feature] Allow export graph #23

Closed Shnoulle closed 4 years ago

Shnoulle commented 4 years ago

Allow (more easily) export graph

Currently : to import/export graph : a possible solution was using \PhpOffice\PhpSpreadsheet\IOFactory directly for writer.

    $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
    $reader->setIncludeCharts(true);
    $spreadsheet = $reader->load($xlsFile);
    $params = require('./params.php'); // Or any other way to do param
    foreach($spreadsheet->getSheetNames() as $sheetName) {
        $sheet = $spreadsheet->getSheetByName($sheetName);
        $templateVarsArr = $sheet->toArray();
        PhpExcelTemplator::renderWorksheet($sheet, $templateVarsArr, $params, array(), array());
    }
    $writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx');
    $writer->setIncludeCharts(true);
    header('Content-Disposition: attachment; filename="'.$fileName);
    header('Content-type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
    header('Pragma: public');
    header('Content-Transfer-Encoding: binary');
    header('Cache-Control: must-revalidate');
    $writer->save('php://output');

Maybe adding an option on outputSpreadsheetToFile and saveSpreadsheetToFile ?

I don't wee how to do it in events, right ?

alhimik1986 commented 4 years ago

Hi. Why don't you want to use events?


$events = [
    PhpExcelTemplator::BEFORE_SAVE => function(Spreadsheet $spreadsheet, IWriter $writer) {
        $writer->setIncludeCharts(true);

        // some additional headers (if necessary)
        header('Pragma: public');
        header('Content-Transfer-Encoding: binary');
        header('Cache-Control: must-revalidate');
    },
];

PhpExcelTemplator::outputToFile($templateFile, $outputFileName, $params, $callbacks, $events);
Shnoulle commented 4 years ago

Because you'r better than me :+1:

thanks a lot !