0

excel to mysql

Загрузка данных из Excel в MySQL с помощью PHP

Не так давно появилась задача – загрузить данные из Ecxel файла в базу сайта, и реализовать механизм так, чтобы быстро можно было обновлять эти данные, т.е. загружать новый файл. Решил попробовать парсер Excel-файлов phpExcelReader, но сколько не бился с ним, получал ошибку типа “… is not readable”. Поэтому решил использовать библиотеку PHPExcel.

Загружать будем прайс-лист:

АртикулНаименованиеКоличествоЦенаВалютаЕдиница
123456Апельсин2050000рубкилограмм
123457Мандарин2054000рубкилограмм
123458Яблоко5023500рубкилограмм

В таблицу со структурой:

idarticlenamequantitypricecurrencyunit

Скачав архив с библиотекой и открыв его вы увидите несколько папок и файлов – это описание и примеры использования библиотеки. Нам понадобится папка “Classes” – распаковываем архив и загружаем её, например, в корень сайта.

Файл excel можно загрузить в нужную папку на сервере, например uploads, через ftp сервер или создать страницу загрузки с <input type="file" name="upload_file". Для меня конечно второй вариант был в приоритете (как реализовать загрузку файла на сервер я писал в статье «Отправка формы и файлов через Ajax»).

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

include 'db_conn.php'; // подключаемся к базе данных
$loadfile = $_POST['file_name']; // получаем имя загруженного файла
require_once $_SERVER['DOCUMENT_ROOT']."/Classes/PHPExcel/IOFactory.php"; // подключаем класс для доступа к файлу
$objPHPExcel = PHPExcel_IOFactory::load($_SERVER['DOCUMENT_ROOT']."/uploads/".$loadfile);
foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) // цикл обходит страницы файла
{
  $highestRow = $worksheet->getHighestRow(); // получаем количество строк
  $highestColumn = $worksheet->getHighestColumn(); // а так можно получить количество колонок

  for ($row = 1; $row <= $highestRow; ++ $row) // обходим все строки
  {
    $cell1 = $worksheet->getCellByColumnAndRow(0, $row); //артикул
    $cell2 = $worksheet->getCellByColumnAndRow(1, $row); //наименование
    $cell3 = $worksheet->getCellByColumnAndRow(2, $row); //количество
    $cell4 = $worksheet->getCellByColumnAndRow(3, $row); //цена
    $cell5 = $worksheet->getCellByColumnAndRow(4, $row); //валюта
    $cell6 = $worksheet->getCellByColumnAndRow(5, $row); //единица измерения
    $sql = "INSERT INTO `price` (`article`,`name`,`quantity`,`price`,`currency`,`unit`) VALUES
('$cell1','$cell2','$cell3','$cell4','$cell5','$cell6')";
    $query = mysql_query($sql) or die('Ошибка чтения записи: '.mysql_error());
  }
}

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

Свежие комментарии

Подписка

Лучшие статьи

Рубрики

Популярное

nginx
Previous Story

NGINX КОНФИГУРАЦИОННЫЙ ФАЙЛ ДЛЯ РАБОТЫ ПРИ ВЫСОКИХ НАГРУЗКАХ

php
Next Story

Как прочитать большой файл средствами PHP (не грохнув при этом сервак)

Latest from Blog

Настройка роутера MikroTik с BGP для просмотра потокового видео дома

Про сервис antifilter.download Из-за большого наплыва пользователей после блокировки YouTube сервис испытывает перегрузки. Обещают починить. Изначально я пользовался именно сервисом antifilter.download, но по непонятным для меня причинам он перестал у меня работать. Я

Решаем проблему блокировок (и YouTube) за 5 минут на роутере Mikrotik через контейнеры и без VPN

как ускорить ютуб и разблокировать доступ к некоторым заблокированным ресурсам прямо на роутере Mikrotik и без VPN. В моем случае используется MikroTik hAP ax3. Стоит упомянуть, что подойдут только роутеры с архитектурой

Mikrotik — несколько ip на внешнем интерфейсе

Рассмотрим ситуацию, когда провайдер выдал нам один шнурок и несколько ip в нем (например, /29 подсеть). И за нашим роутером находится несколько разных подсетей, которые надо выпускать наружу с разными src-ip; также

Игра системный администратор

docker run -p 8080:8080 -p 3390:3389 –name play-adobe-flash-after-eol jchprj/play-adobe-flash-after-eolзайти localhost:8080, и открыть эту страницу, или https://serveradmin.ru/files/sysadmin.swf

Что делать, когда на сервере кончаются файловые дескрипторы (inode)

Нередки случаи, когда причиной проблем на сервере становится переполнение файловых дескрипторов (inode). Симптомы точно такие же, как при переполнившемся диске, только вот диск при этом может оказаться свободным. Количество inode каждой файловой системы определяется при разворачивании ОС.
Go toTop