DrZhmurge
@DrZhmurge

Как лучше всего формировать xlsx в php на 10+ млн ячеек?

Phpspreadsheet справляется плохо. 4 Гб оперативки заканчиваются уже на 4 млн ячеек. И процесс выгрузки идет минут 30. Может кто посоветовать более быстрые библиотеки или способы?
  • Вопрос задан
  • 105 просмотров
Пригласить эксперта
Ответы на вопрос 3
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
xlsx это zip архив c xml файлами, можешь формировать его вручную, сделай шаблон файла чтобы не генерировать с нуля и было проще вставить контент. но такой объем данных будет тормозить в любом случае, даже если конвертировать его в CSV
Ответ написан
Комментировать
erge
@erge
Примус починяю
Чтобы было быстрее работайте с файлами xl/worksheets/sheet?.xml (внутри zip архива - xlsx файла) напрямую! либо как с XML, либо как с текстом поиск/замена (через регулярки например), хотя... если это чистый файл с нуля, то проще и быстрее генерировать эти файлы с нуля как текст, в этом файле данные в разделе sheetData, см. пример:

<sheetData>
    <row r="1">
      <c r="A1" t="str">
        <v>Иванов</v>
      </c>
      <c r="B1" t="str">
        <v>Петров</v>
      </c>
      <c r="С1" t="str">
        <v>Сидоров</v>
      </c>
...
    </row>
  </sheetData>


PS: да сохраните любой эксельник в xlsx переименуйте в zip и посмотрите, поймете.

Либо переходите на связку ... например на Go + пакет Excelize и либо на нем микросервис сделать и соответственно работать, либо бинарник для cmdline и соответственно вызывать его из PHP
Ответ написан
vshemarov
@vshemarov
Попробуйте https://packagist.org/packages/avadim/fast-excel-writer

По памяти точно уложитесь, и по времени тоже будет однозначно быстрее Phpspreadsheet
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы