Комментарии 28
Неплохая статья. Но вот про форматы, которые библиотека может читать/записывать, вы похоже перепутали местами.
Т.е. это запись:
А это чтение:
Т.е. это запись:
С помощью библиотеки PHPExcel можно читать следующие форматы:
- Excel 2007;
- Excel 97 и поздние версии;
- PHPExcel Serialized Spreadshet;
- HTML;
- PDF;
- CSV.
А это чтение:
С помощью библиотеки PHPExcel можно записывать данные в следующие форматы:
- Excel 2007;
- Excel 5.0/Excel 95;
- Excel 97 и поздние версии;
- PHPExcel Serialized Spreadshet;
- Symbolic Link;
- CSV.
0
Насколько я понимаю phpexcel.codeplex.com и github.com/PHPOffice/PHPExcel одна и та же библиотека, только по 2 ссылке более свежая информация.
+2
*.fods + Libre Office. Чистый XML. Хватит кормить Microsoft.
-7
Вы пробовали генерировать XLSX файлы с количеством строк более 5000?
У нас была задача сделать экспорт в Excel списка товаров. Там было в районе 15000 строк. При генерации файла с использованием данной библиотеки, php на пике потреблял ~1024Mb, что не могло радовать.
Пришлось изворачиваться и генерировать набор файлов, где первый — сроки с 1 по 5000, второй — с 5001 по 10000 и т.д. Файлы генерировались в отдельном процессе php, запускаемом примерно так:
Только так вышло экспортировать нормально все это добро, но ощущение костылей преследует до сих пор :)
У нас была задача сделать экспорт в Excel списка товаров. Там было в районе 15000 строк. При генерации файла с использованием данной библиотеки, php на пике потреблял ~1024Mb, что не могло радовать.
Пришлось изворачиваться и генерировать набор файлов, где первый — сроки с 1 по 5000, второй — с 5001 по 10000 и т.д. Файлы генерировались в отдельном процессе php, запускаемом примерно так:
<?php
...
for($cycleIndex = 0; $cycleIndex < $cycleCount; $cycleIndex++)
{
$executableTemplate = ':phpExec minion export --exportClass=:minionTask';
$executableTemplate .= ' --skip=:skip --take=:take --fileName=:fileName --userId=:userId --extra=:extra';
$executable = strtr($executableTemplate, array(
':phpExec' => Kohana::$config->load('core.phpExec'),
':minionTask' => $minionTask,
':fileName' => $fileName,
':userId' => $userId,
':take' => $maxTake,
':skip' => $cycleIndex * $maxTake,
':extra' => base64_encode(json_encode($this->_extraStateOptions)),
));
$output = array();
exec($executable, $output);
...
//Проверки статусов и сбор файлов для последующей упаковки
}
...
Только так вышло экспортировать нормально все это добро, но ощущение костылей преследует до сих пор :)
+3
Очень прожорливая эта штука. Мы в свое время вообще от неё отказались в пользу простенькой библиотеки, заточенной под наши нужды.
А пхпэксель оставили для генерации «красивых отчетов», одно- двух- страничных.
А пхпэксель оставили для генерации «красивых отчетов», одно- двух- страничных.
0
обошел это очень просто в своё время: генерировал обычный html table, приделывал расширения xlsx, MSO кушал и не плевался(кроме сообщения о том, что «что-то с форматом не том, открывается как есть»).
Это тоже костыль, но довольно рабочий. Альтернатива — CSV; работает всё-таки неплохо(кроме небольшой пляски с кодировками, но там всё совсем просто).
и как уже написали ниже, из табличек/CSV можно гонять консольным LO/OO куда угодно
Это тоже костыль, но довольно рабочий. Альтернатива — CSV; работает всё-таки неплохо(кроме небольшой пляски с кодировками, но там всё совсем просто).
и как уже написали ниже, из табличек/CSV можно гонять консольным LO/OO куда угодно
+2
Хотел написать про html и приделывание расширения, но вы меня опередили :)
0
Сделал в одной из своих программ выгрузку в формате XML Spreadsheet (одиночный xml-файл). Правда, картинки туда вроде не впихнёшь. Но размеры и стили ячеек можно задавать спокойно и делать вполне прилично выглядящие документы на много листов.
0
Да, PHPExcel прожорливенькая на RAM. Отчеты более 5000 строк за одну выгрузку не генерировал (уже точно не помню). При больших объемах тоже приходится извращаться. В большинстве случаев (если не требуется украшательств) спасает импорт в CSV. Или же выбор лимита.
0
Соглашусь. В нашем случае как раз украшательства и были нужны, т.е. форматирование, ячейки заголовки синие и жирным шрифтом, все красиво разлиновано и прочий офисный ужас.
Сейчас сижу и думаю, надо было проверить то, что рекомендовал хабраюзер la0 — решение на просторах коллективного разума предложено было не раз и не два, но мы его благополучно проигнорировали, погнавшись за фичами :)
Сейчас сижу и думаю, надо было проверить то, что рекомендовал хабраюзер la0 — решение на просторах коллективного разума предложено было не раз и не два, но мы его благополучно проигнорировали, погнавшись за фичами :)
0
Все хорошо пока вы пишете / читаете небольшой файл.
Как только к-во строк переваливает за тысячи, работать с этой библиотекой невозможно. Съедается не только память, может просто уйти в себя.
Так же есть проблемы с кодировкой Excel 95 который генерит 1С 7, хотя это проблема на другой стороне, пишут что формат реализован не до конца.
Проблема с лидирующими 0'ми в формате CSV.
Спасает конвертация консолью Libre/Open Office в CSV и обработка нативными средствами.
Как только к-во строк переваливает за тысячи, работать с этой библиотекой невозможно. Съедается не только память, может просто уйти в себя.
Так же есть проблемы с кодировкой Excel 95 который генерит 1С 7, хотя это проблема на другой стороне, пишут что формат реализован не до конца.
Проблема с лидирующими 0'ми в формате CSV.
Спасает конвертация консолью Libre/Open Office в CSV и обработка нативными средствами.
0
Даже если вот эта статья Вашего авторства — копипаста на хабре вроде как недопустима.
-1
Да это моя статья.
Я перед публикацией смотрел некоторые статьи с хабры специально (есть ли где нибудь их еще публикации). Находил 1-3 копии. Самая первая моя статья размещена на хабре уже года. Предупреждений не было. Ну если вынесут предупреждение – придется удалить.
Я перед публикацией смотрел некоторые статьи с хабры специально (есть ли где нибудь их еще публикации). Находил 1-3 копии. Самая первая моя статья размещена на хабре уже года. Предупреждений не было. Ну если вынесут предупреждение – придется удалить.
0
копипаста это по определению не авторский текст.
0
НЛО прилетело и опубликовало эту надпись здесь
Спасибо за статью, очень порадовали примеры со стилями. Не хватает только инструкции по merged cells.
0
Рад что в помощь.
Вот:
// Получаем массив объединенных ячеек
print_r($sheet->getMergeCells());
// объединение
$sheet ->mergeCells(«A1:G1»);
Вот:
// Получаем массив объединенных ячеек
print_r($sheet->getMergeCells());
// объединение
$sheet ->mergeCells(«A1:G1»);
0
Вы имеете ввиду, как прочесть множество объединенных ячеек как одну?
0
В том числе. А еще можно было бы привести пример переопределения итератора для строк/столбцов.
0
Извиняюсь за долгий ответ. Не понял, что вы имеете ввиду про итераторы.
0
phpExcel дает возможность получить итераторы сторк и столбцов. Обернув их в IteratorIterator или FilterIterator можно получить достаточно крутые возможности, а именно:
И прочее-прочее. Еще очень удобно такие штуки дебажить с помощью LimitIterator. Ну это так все, из собственного опыта.
- Читать строки «пачками», например по 6 штук сразу. Этот пример актуален если нужно читать какую-то свзанную информацию из таблицы, в моем случае это были данные клиентов компании.
- Читать только необходимые строки. Например только те, у которых в указанной ячейке нужное значение.
И прочее-прочее. Еще очень удобно такие штуки дебажить с помощью LimitIterator. Ну это так все, из собственного опыта.
0
Тот случай, когда гуглил, как запилить очередную фичу и нашел ровно то, что нужно и даже чуть больше!
Автору огромное спасибо
Автору огромное спасибо
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Публикации
Изменить настройки темы
Обработка и оформление отчетов в Excel на PHP