написать по одному листу за раз в phpexcel - PullRequest
1 голос
/ 06 апреля 2011

Я использую phpexcel для записи файла xlsx.

Работает нормально, но мне не хватает памяти.

Это потому, что я пишу два листа в один файл, оба с 15k + строк.

Что я хочу сделать, это

создайте один лист и сохраните его в файл, или очистите где-нибудь, чтобы он не занимал много места.

создать следующий лист.

разобраться с выводом.

Есть ли способ сделать это?

Ответы [ 2 ]

0 голосов
/ 06 апреля 2011

Хотя PHPExcel описывается как электронная таблица «в памяти» и ограничена лимитом памяти PHP, можно уменьшить объем памяти, необходимый при использовании кэширования ячеек.Этот метод полностью описан в документации разработчика (раздел 4.2.1) и может быть настроен для сжатия объектов ячейки в памяти или кэширования данных ячейки в кэши памяти, такие как APC, Wincache или memcache, или на диск.Это может уменьшить использование памяти на целых 60%, хотя и за счет скорости.Использование кэширования ячеек может позволить вам создать оба листа в одной и той же книге без исчерпания памяти.

Если вы хотите создать две книги, каждая с одним листом, а не одну книгу с двумя листами, то выВам нужно будет удалить первую книгу из памяти после того, как вы ее сохранили, прежде чем начинать создавать вторую ... в противном случае вы сэкономите очень мало памяти.Из-за циклических ссылок в объекте книги вам нужно будет их разорвать, прежде чем отключать объект PHPExcel.Это описано в разделе документации для разработчиков 4.3

0 голосов
/ 06 апреля 2011

В основном:

while(... have sheet 1 data...) {
   build sheet 1
}

while(... have sheet 2 data...) {
  build sheet 2
}

вместо

while (... have data...) {
   add to sheet 1
   add to sheet 2
}

Если вы не можете сохранить всю электронную таблицу в памяти, вам придется увеличить предел памяти.Насколько я знаю, PHPExcel и другие библиотеки построения электронных таблиц не будут работать с представлением на диске, только то, что может поместиться в памяти.

...