Все ленты — последние статьи

Как перенести данные из Excel в MySQL с помощью PHP

Источник:  http://pishemsite.ru/php/kak-perenesti-dannie-iz-excel-v-mysql-s-pomoschyu-php

Файлик источник, на который есть в статье 

Доброго времени суток…
В этой статье подробно расписано как считать данные из файла Excel и затем эти самые данные занести в таблицу БД MySQL. Это очень удобно использовать, если Вам нужно часто обновлять прайс-лист Вашего Интернет магазина или какие либо еще табличные данные…

 

Давайте сразу определимся с целью использования данного скрипта. Для примера пусть это будет прайс-лист со следующей структурой:

Артикул Наименование Количество Цена Валюта Единица
23163 Штуковина 2 500 руб шт
65325 Гадость 6 540 руб ящик
68435 Еще какая-то вещь 2 235 руб литр

Соответственно, и таблица MySQL будет иметь схожую структуру, только добавим туда еще один столбец id.

id art name
kol
price
val
ed
1 23163 Штуковина 2 500 руб шт

Итак, приступим…

По сути, мы ничего изобретать не будем. Все уже придумано до нас (или за нас). Есть великолепный парсер Excel-файлов, который можно скачать тут или на крайний случай здесь. Этот парсер (или Reader) состоит из двух файликов, расположенных в папке Excel. Остальные файлы — это примеры и дополнительная информация. Парсер работает с форматом Excel 97-2003!
В папке Excel открываем файл reader.php и заменяем строку
require_once 'Spreadsheet/Excel/Reader/OLERead.php';
на следующую:
require_once 'oleread.inc';
Это 31-ая строка. Непонятно почему там оказался этот путь. Но это поправимо…
Идем дальше…

Создадим файл price.php и запишем туда следующий код:
1<!DOCTYPE html>
2<html>
3<head>
4<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5 <title>Результат загрузки файла</title>
6</head>
7<body>
8<?php
9error_reporting(0); // Выключаем показ ошибок. Чтобы их видеть — вместо 0 поставьте E_ALL
10include('db_conn.php');
11$max_file_size = 5; // Максимальный размер файла в МегаБайтах
12if($_POST['update']=='OK'){
13 // СТАРТ Загрузка файла на сервер
14 if($_FILES["filename"]["size"] > $max_file_size*1024*1024){
15 echo 'Размер файла превышает '.$max_file_size.' Мб!';
16 include('form_file_load.php');
17 exit;
18 }
19 if(copy($_FILES["filename"]["tmp_name"],$path.$_FILES["filename"]["name"])){
20 echo("Файл "."<b>".$_FILES["filename"]["name"]."</b>"." успешно загружен!<br>");
21 }
22 else{
23 echo 'Ошибка загрузки файла<br>';
24 include('form_file_load.php');
25 exit;
26 }
27
28 //СТАРТ Считывание из файла Excel и запись в БД
29 require_once "Excel/reader.php";
30 $data = new Spreadsheet_Excel_Reader();
31 $data->setOutputEncoding("UTF-8"); //Кодировка выходных данных
32 $data->read($_FILES["filename"]["name"]);
33
34 for ($i=1; $i<=$data->sheets[0]["numRows"]; $i++){
35 $cell1 = addslashes(trim($data->sheets[0]["cells"][$i][1]));
36 $cell2 = addslashes(trim($data->sheets[0]["cells"][$i][2]));
37 $cell3 = addslashes(trim($data->sheets[0]["cells"][$i][3]));
38 $cell4 = addslashes(trim($data->sheets[0]["cells"][$i][4]));
39 $cell5 = addslashes(trim($data->sheets[0]["cells"][$i][5]));
40 $cell6 = addslashes(trim($data->sheets[0]["cells"][$i][6]));
41
42 $ins="INSERT INTO `price` (`art`,`name`,`kol`,`price`,`val`,`ed`
43 )VALUES('$cell1','$cell2','$cell3','$cell4','$cell5','$cell6')";
44 $query = mysql_query($ins);
45 if(!$query){
46 die('Ошибочка');
47 }
48 }
49}
50else{
51 include('form_file_load.php');
52}
53?>
54</body>
55</html>
Затем сделаем файл form_file_load.php с формой загрузки Excel-файла:
1<p><b>Обновление прайс-листа</b></p>
2<form action="" method="post" enctype="multipart/form-data">
3 <b>Выберите файл Excel</b><br />
4 <input type="file" name="filename" size="15" /><br /><br />
5 <input type="hidden" name="update" value="OK" />
6 <input type="submit" value="Загрузить" /><br />
7</form>
Ну и напоследок, уже знакомый нам db_conn.php:
1
5<!DOCTYPE html>
6<html>
7<head>
8 <meta http-equiv="content-type" content="text/html; charset=utf-8" />
9 <title>Не могу подключиться к БД</title>
10</head>
11<body>
12 <br /><br /><br />
13 <h1 align="center">Проверьте настройки подключения к БД</h1>
14</body>
15</html>
16<?php
17 exit;
18 }
19 mysql_select_db('db_name');
20 @mysql_query('set character_set_client="utf8"');
21 @mysql_query('set character_set_results="utf8"');
22 @mysql_query('set collation_connection="utf8_general_ci"');
23?>
Совсем немного о phpExcelReader
$data->sheets[0]["numRows"] — тут у нас хранится число строк листа 0 (в Excel по умолчанию это Лист1)
$data->sheets[0]["numCols"] — тут у нас хранится число столбцов
$data->sheets[0]["cells"][5][1] — а тут хранится значение ячейки в 5-й строке 1-го столбца в листе 0
Как видно, тут совсем все просто. Можем сделать циклический проход по ячейкам, а можем "считать" только определенную.
Вот, собственно и все…