Страницы

Поиск по вопросам

среда, 17 октября 2018 г.

Конвертация большого CSV в XLS

В кастомной CMS есть возможность скачать рабочие данные в формате Excel. Сейчас это происходит через вызов внешнего конвертера CSV → XLS. Никакого стилевого оформления данных нет и не требуется, это просто аналог csv в более понятном для клиентов виде. Хочется заменить внешний конвертер на что-нибудь родное для PHP.
Посоветуйте библиотеку или просто подход, исходя из личного опыта. Подчеркиваю, что данных бывает много! PHPExcel не предлагайте, пожалуйста. Он на больших объемах кушает слишком много памяти.


Ответ

Я бы не стал писать отдельный ответ, но вы отметили что оформление вас не интересует.
Чтож, мне кажется вам надо разбить задачу на 2 части:
1) Генерация данных по кусочкам - каждый кусок должен быть такого размера, чтобы ваш PHP (с вашими ограничениями по памяти, ресурсам процессора и прочим настройкам) мог спокойно обработать его.
2) Собственно запись данных из конкретного кусочка всей информации в файл.
Исходя из такого подхода, вы можете запустить некий цикл/очередь, и по очереди обработать любое нужное вам количество информации (!). А затем собственно сконвертировать в формат Excel.
Вы конечно же можете использовать вышеозвученный CSV формат, а затем конвертировать его в Excel. Однако, я могу предложить лучшую альтернативу - формат XML (XML Spreadsheet 2003) или Open XML. Для использования этого формата вовсе не обязательно использовать ту же библиотеку PHPExcel, вы можете написать и собственный код, так как вас не интересует оформление, и поэтому большая часть функций PHPExcel вам вообще не нужна.
Что вам нужно это вручную создать нужную структуру формата файла в XML, и в цикле выдавать в него значения из кусочков (file append). В итоге, после завершения обработки всех данных вы получите файл в формате .XLSX и ваш клиент спокойно сможет открыть его в Excel.
В результате у вас получится что-то вроде этого:
Author Author 2015-04-19T21:57:54Z 14.00 9264 20100 0 24 False False

Column 1 Column 2 Row 1 Row 2

Собственно, если вы решите пойти таким путём - вы можете поискать в Гугле по запросам "OpenXML generate Excel" и посмотреть как это делается в разных языках (не только через PHP). Учитывая отсутствие оформления - большая часть проблем у вас будет не с генерацией контента, или конвертированием в XML, а в том чтобы создать исходный шаблон и добиться того, чтобы Excel открывал его правильно.

Комментариев нет:

Отправить комментарий