PhpSpreadsheet. Как правильно сохранять файл?

Здравствуйте хабрчаны.
Есть задача записывать зарегистрированные билеты в xlsx, для этого я использую PhpOffice\PhpSpreadsheet.
Вот то что на данный момент у меня имеется:
require_once dirname(dirname(__FILE__)).'/vendor/autoload.php';


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


try {
    $inputFileName = dirname(__FILE__).'/excelFile/excelFile.xlsx';
    $reader = IOFactory::createReaderForFile($inputFileName);
    $reader->setReadDataOnly(TRUE);
    $spreadsheet = $reader->load($inputFileName);
 

    $worksheet = $spreadsheet->getActiveSheet();

    $rows_count = get_rows_count($worksheet) + 1;


    $worksheet->setCellValue('A'.$rows_count, $_POST['name'] . ' ' . $_POST['surname']);
    $worksheet->setCellValue('B'.$rows_count, $_POST['birthday']);
    $worksheet->setCellValue('C'.$rows_count, $_POST['phone']);
    $worksheet->setCellValue('D'.$rows_count, $_POST['district']);
    $worksheet->setCellValue('E'.$rows_count, $_POST['shop-cat']);
    $worksheet->setCellValue('F'.$rows_count, $_POST['shop']);
    $worksheet->setCellValue('G'.$rows_count, $_POST['num']);
    $worksheet->setCellValue('H'.$rows_count, $_POST['date']);
    $worksheet->setCellValue('I'.$rows_count, $_POST['sum']);


    header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
    header('Content-Disposition: attachment;filename="'.$inputFileName.'"');
    header('Cache-Control: max-age=0');

    $writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
    $writer->save('php://output');

    echo 'success';
} catch(Exception $e) {
    echo $e;
}


function get_rows_count($worksheet) {
    $count = 0;
    foreach($worksheet->getRowIterator() as $row) {
        $count++;
    }

    return $count;
}


Проблема в том , что файл не сохраняется, с документацией толком не разобрался.
Подскажите как исправить ?
  • Вопрос задан
  • 396 просмотров
Пригласить эксперта
Ответы на вопрос 1
@sidni
Php Developer
Помниться я как то не так делал..... скорее всего вам надо поменять save, тк как вы в браузере сразу же отдаете генерируемый файл без сохранения (точнее сохранение наверное есть только временного файла во временной дирректории).
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->fromArray($dataArray, null, 'A1', true);
$writer = new Xlsx($spreadsheet);
$writer->save($fileName);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы