Реализация Быстрого Импорта Из Excel На Php.

Продолжаем рассказывать о технологиях, используемых на нашем сервис email-маркетинга Pechkin-mail.ru .

Одной из ключевых задач любого сервиса, связанного с данными клиентов, является загрузка этих данных в сервис.

Для Печкина очень важно быстро и легко загружать адресные базы, содержащие адреса электронной почты, имена, фамилии и другие дополнительные данные для пользователя.



Реализация быстрого импорта из Excel на PHP.



Что использовать в качестве инструмента?

В качестве базового стандарта, используемого при импорте адресных баз, мы взяли Microsoft Excel. Это объясняется просто:
  • это стандартный инструмент, который знают 100% пользователей компьютеров на базовом уровне.

    Более того, в бизнесе это де-факто корпоративный стандарт и используется даже на рабочих компьютерах Mac или Linux.

  • Практически все CRM, CMS, облачные или десктопные системы имеют экспорт в Excel или CSV, который путем простого пересохранения конвертируется в формат XLS или XLSX.
  • Также известно, что «90% ошибок программного обеспечения расположены в полуметре от монитора».

    Не в обиду обычным пользователям, но надо учитывать самый базовый уровень обучения и технической поддержки.

    Для поддержки объяснения достаточно сказать «Скачать файл Excel», а не объяснить процедуру подготовки файла в необходимом формате.

Решена проблема пользователя при импорте адресных баз.

Но здесь возникает сама проблема развития.



Наша боль как разработчиков

Эксель - это не опенсорсная разработка, а собственное решение.

Формат данных, особенно в новых версиях после 2007 года (xlsx), нетривиален.

Печкин использует PHP, поэтому мы начали поиск библиотек, которые позволят решить эту проблему.

Но тут мы столкнулись с проблемой, что ряд библиотек не позволяют читать xlsx:

  • php-читатель таблиц читает различные форматы (.

    xls, .

    ods И .

    csv)

  • PHP-ExcelReader (только xls)
  • PHP_Excel_Reader (только xls)
  • PHP_Excel_Reader2 (только xls)
  • Программа чтения файлов XLS Только реклама и xls
  • ПростойXLSX Судя по описанию умеет читать xlsx, однако автор ссылается только на xls
  • PHP Excel Explorer Только коммерческие и xls
Наше внимание привлекла библиотека PHPExcel .

Мы использовали его несколько лет назад в Сервис смс-рассылок SMS24X7.ru .

Петя Соколов ( Петр_Соколов ), наш талантливый разработчик, написал обертку для этой библиотеки, исправляющую ряд ее недостатков и ошибок.

Библиотека, безусловно, интересная и развитая.

Но для Печкина использовать его стало невозможно спустя пару лет, когда и мы, и наши клиенты подросли — его катастрофические требования к ресурсам и колоссальные затраты времени на парсинг файлов.

Например, нередки случаи загрузки на сервис адресных баз > 100 000 строк со сложной структурой.

Что делать, если файл уже 500 000 строк и «весит» более 30 МБ?

А потом нас отпустили.

В поисках мы наткнулись на коммерческую библиотеку libxl после просмотра Результаты «ремесленный тест» на Stackoverflow. Библиотека написана на C++ и благодаря отличному объектно-ориентированному расширению для PHP от Илья Альшанецкий , прост в освоении и интеграции (например, переписывание нашего текущего решения с PHPExcel на LibXL заняло около 3 часов).

Что очень здорово, учитывая, что документации от разработчика расширения, к сожалению, нет и нужно использовать расширение Reflection. Процесс установки очень прост.

  
  
  
   

cd /usr/local/src/ wget http://libxl.com/download/libxl.tar.gz tar zxfv libxl.tar.gz cd libxl-3.5.4.1/ ln -s include_c include cd .

/ wget https://github.com/iliaal/php_excel/archive/master.zip unzip master.zip cd php_excel-master/ .

/configure --with-excel --with-libxl-libdir=.

/libxl-3.5.4.1/lib64 --with-libxl-incdir=.

/libxl-3.5.4.1/include_c make make test make install

В результате компиляции вы получите файл excel.so в папке /usr/lib/php5/20090626/.

Теперь достаточно создать файл /etc/php5/conf.d/excel.ini с содержимым.



extension=excel.so

Проверим, установлен ли модуль, и перезапустим веб-сервер.



php -m | grep excel service lighttpd restart

В коде тоже все очень просто.

Загрузите файл и прочитайте необходимые ячейки.

Например, вот так:

$doc = new ExcelBook(); $doc->loadFile(‘example.xls’); for($r=$sheet->firstRow();$r<=$sheet->lastRow();$r++){

Теги: #Электронный маркетинг #импорт из Excel #Excel #php #php_excel #libxl #информационная рассылка по электронной почте #php

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.