0

excel to mysql

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

19.07.2022

Не так давно появилась задача – загрузить данные из 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

RouterOS/MikroTik на Debian

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

How to Install Proxmox Virtual Environment on Debian 11

Introduction Proxmox Virtual Environment is an open-source virtualization management program. It provides a single platform to manage services and functions like KVM Hypervisor, Linux Containers (LXC), storage & networking. In addition, it

Настройка Wireguard VPN на своем сервере

Настройка серверной части После успешного подключения я напишу несколько команд и описание того что они производят для понимания процесса: Обновляем список пакетов в репозиториях apt update Обновим сами пакеты apt upgrade -y

Установка Zabbix 7 c NGINX + PostgreSQL + TimescaleDB на Ubuntu Server или Debian

Сервер Zabbix предполагает достаточную вариативность в выборе СУБД и веб-сервера, поэтому многое тут будет зависеть от персональных предпочтений. Однако расширение TimescaleDB позволяет поддерживать высокий уровень производительности и масштабирования при работе с временными

Настройка простого беспроводного репитера на устройстве MikroTik

При развертывании беспроводных сетей достаточно часто возникают ситуации, когда в некоторых местах квартиры или офиса мощность Wi-Fi сигнала недостаточна для уверенной работы. Конечно, наиболее действенным решением является создание централизованно управляемой сети и
Go toTop