Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Обработка xlsx прайса
Форумы портала PHP.SU » PHP » Программирование на PHP » Обработка xlsx прайса

Страниц (1): [1]
 

1. kapUstin - 30 Марта, 2015 - 16:14:32 - перейти к сообщению
Есть прайс в экселе на 680000 строк (35Мб), необходимо в этом прайсе выбрать товары определенного производителя и определенным образом их преобразовать.
Попробовал сделать все это с помощью PHPExcel. Когда строк немного, то работает все нормально, но если грузить файл полный, со всеми строками, то на сервере не хватает памяти (memory_limit 128M) для выполнения скрипта, даже без необходимых преобразований. Пробовал увеличивать лимит до 1024M, выдает 500 ошибку.
Подскажите, что не так делаю, я в этих делах нуб. Может вообще не через PHPExcel делать надо, или можно сделать как-то по частям?
2. Faraon-san - 30 Марта, 2015 - 23:56:19 - перейти к сообщению
Какой результат ты хочешь получить?
Не проще ли запихнуть файл в базу данных и там уже сортировать и преобразовывать как тебе надо?
3. kapUstin - 31 Марта, 2015 - 11:45:18 - перейти к сообщению
как его запихнуть в базу лучше?
4. Faraon-san - 31 Марта, 2015 - 11:58:27 - перейти к сообщению
Самый простой вариант это сохранить Excel в текстовом формате с разделителем табуляция, а скриптом считывать одну строку, разбивать ее и вставлять в базу данных.
Другой вариант это на локальном компьютере распарсить этот файл "PHPExcel" (тут ограничения памяти сам выставляешь), вставляешь в базу данных и phpmyadmin делаешь экспорт таблице, а на сервере импортируешь.

Тут как ни крути данных очень много, в массив это все не запихнешь, 1 гига памяти даже не хватит.
5. kapUstin - 31 Марта, 2015 - 12:15:13 - перейти к сообщению
нужна автоматизация процесса, без ручной закачки и разбора.
Прайс в xlsx приходит на почту от поставщика, нужно вычленить отдельные позиции и поменять артикулы и названия... По окончанию, должен получиться файл одного из форматов xlsx, csv, txt. Для небольших прайсов до 15000 строк PHPExcel подходит нормально, но в данном случае очень много строк. Сейчас подумал распаковать исходный файл и спарсить в базу xml-ку.
6. Dastor - 31 Марта, 2015 - 12:43:06 - перейти к сообщению
Берем любую утилиту для парсинга xlsx->csv.
Например, такую https://github[dot]com/dilshod/xlsx2csv (с xls не умеет работать).
На больших объемах работает достаточно шустро.
На выходе получаем csv-файл.

Загружаем этот файл в mysql с помощью load data local infile (очень быстро загружает данные).
И уже работаем с таблицей в бд, если нужны преобразования.

 

Powered by ExBB FM 1.0 RC1