Импорт данных из Excel в таблицу mySQL

Самая распространенная составляющая молодого интернет-магазина – чем его наполнить. Практически любой поставщик дает нам прайс своих товаров или услуг, чаще всего это excel файл, на нем мы остановимся. Я приведу вам свой пример из реально работающего сайта, с синтаксисом 2016-2017 года. Почему акцентирую на это внимание, очень много статей N-ное количество лет давности, а современные хостеры используют актуальные версии языков программирование. Код который я приведу ниже, размещен и протестирован на хостинге ukraine.com.ua.

Для начала определимся с таблицей в базе данных. Она будет иметь те колонки что и ваш прайс. В моем случае прайс выглядит так:
excel-to-db-1

для него мы создаем таблицу в базе данных:
excel-to-db-2

Конечно никто не будет изобретать велосипед, а будет использовать великолепный парсер Excel-файлов, который можно скачать тут. Этот парсер состоит из двух файликов, расположенных в папке Excel. Остальные файлы – это примеры и дополнительная информация.

Важно!!! Парсер работает с форматом Excel 97-2003!!!

Следующий и немаловажный шаг! я не сразу это заметил, поэтому потерял время)).
В папке Excel открываем файл reader.php и заменяем строку

require_once 'Spreadsheet/Excel/Reader/OLERead.php';


на следующую:

require_once 'oleread.inc';

Далее создадим файл price.php и запишем туда следующий код:

# Соединямся с БД
include ("bd.php");
# Выключаем показ ошибок. Чтобы их видеть - вместо 0 поставьте E_ALL
error_reporting(0); 
$max_file_size = 5; // Максимальный размер файла в МегаБайтах
if($_POST['update']=='OK'){
    // СТАРТ Загрузка файла на сервер
    if($_FILES["filename"]["size"] > $max_file_size*1024*1024){
        echo 'Размер файла превышает '.$max_file_size.' Мб!';
        include('form_file_load.php');
        exit;
    }
    if(copy($_FILES["filename"]["tmp_name"],$path.$_FILES["filename"]
["name"]))
    {
        echo("Файл "."<b>".$_FILES["filename"]["name"]."</b>".
" успешно загружен!<br>");
    }
    else{
        echo 'Ошибка загрузки файла<br>';
        include('form_file_load.php');
        exit;
    }
 
    //СТАРТ Считывание из файла Excel и запись в БД
    require_once "Excel/reader.php";
    $data = new Spreadsheet_Excel_Reader();
    $data->setOutputEncoding("UTF-8"); //Кодировка выходных данных
    $data->read($_FILES["filename"]["name"]);
 
    for ($i=1; $i<=$data->sheets[0]["numRows"]; $i++){
        $cell1 = addslashes(trim($data->sheets[0]["cells"][$i][1]));
        $cell2 = addslashes(trim($data->sheets[0]["cells"][$i][2]));
        $cell3 = addslashes(trim($data->sheets[0]["cells"][$i][3]));
        $cell4 = addslashes(trim($data->sheets[0]["cells"][$i][4]));
        $cell5 = addslashes(trim($data->sheets[0]["cells"][$i][5]));
 
        $update_filin = mysql_query("INSERT INTO `price` 
(`brand`, `code`, `name`, `sklad`, `price`) 
VALUES ('$cell1', '$cell2', '$cell3', '$cell4', '$cell5') ");
    }
}
else{
    include('form_file_load.php');
}

Затем сделаем файл form_file_load.php с формой загрузки Excel-файла:

<form action="" method="post" enctype="multipart/form-data">
    <b>Выберите файл Excel</b><br />
    <input type="file" name="filename" size="15" /><br /><br />
    <input type="hidden" name="update" value="OK" />
    <input type="submit" value="Загрузить" /><br />
</form>

$data->sheets[0][“numRows”] – тут у нас хранится число строк листа 0 (в Excel по умолчанию это Лист1)
$data->sheets[0][“numCols”] – тут у нас хранится число столбцов
$data->sheets[0][“cells”][5][1] – а тут хранится значение ячейки в 5-й строке 1-го столбца в листе 0

Собственно это все, что необходимо чтобы наполнить вашу базу данных товарами.

Огромное спасибо Детману Виталию за помощь в решении этой задачи.

Добавить комментарий