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

Интеграция Asterisk и Битрикс24

В сети есть разные варианты интеграции IP-АТС Asterisk и CRM Битрикс24, но мы, все таки, решили написать свою. По функционалу все стандартно: Под катом расскажу как все настроить у себя и дам

Nextcloud migrate to PostgreSQL

Also getting the famous “1213 Deadlock found when trying to get lock; try restarting transaction”? A few users reported switching to PostgreSQL fixed it. While I did not believe at first… Yes…

Автоматизированные бэкапы postgresql

Всем привет! Я бы сказал что эта статья cookbok по которому можно создать простое и эффективное решение для создания бэкапов базы данных. Казалось бы довольно очевидная задача но тем не менее когда

Быстрое восстановлении базы 1С в PostgreSQL bash скриптом

В прошлом уроке мы успешно применили скрипт для создания резервной копии базы. Сегодня мы разберем скрипт, с помощью которого можно быстро восстановить базу из последнего созданного бэкапа. Скрипт можно скачать здесь >>> Все что надо
Go toTop