Импорт excel файла в базу данных

There are many articles about writing code to import an Excel file, but this is a manual/shortcut version:

If you don’t need to import your Excel file programmatically using code, you can do it very quickly using the menu in SQL Server Management Studio (SSMS).

The quickest way to get your Excel file into SQL is by using the import wizard:

  1. Open SSMS (SQL Server Management Studio) and connect to the database where you want to import your file into.

  2. Import Data: in SSMS in Object Explorer under ‘Databases’, right-click the destination database, and select Tasks, Import Data. An import wizard will pop up (you can usually just click Next on the first screen).

    Enter image description here

  3. The next window is ‘Choose a Data Source‘. Select Excel:

  • In the ‘Data Source’ dropdown list, select Microsoft Excel (this option should appear automatically if you have Excel installed).

  • Click the ‘Browse’ button to select the path to the Excel file you want to import.

  • Select the version of the Excel file (97-2003 is usually fine for files with a .XLS extension, or use 2007 for newer files with a .XLSX extension)

  • Tick the ‘First Row has headers’ checkbox if your Excel file contains headers.

  • Click Next.

    Enter image description here

  1. On the ‘Choose a Destination‘ screen, select destination database:
  • Select the ‘Server name’, Authentication (typically your sql username & password) and select a Database as destination. Click Next.

    enter image description here

  1. On the ‘Specify Table Copy or Query‘ window:
  • For simplicity just select ‘Copy data from one or more tables or views’, click Next.
  1. Select Source Tables:‘ choose the worksheet(s) from your Excel file and specify a destination table for each worksheet. If you don’t have a table yet the wizard will very kindly create a new table that matches all the columns from your spreadsheet. Click Next.

    Enter image description here

  2. Click Finish.

Microsoft SQL Server позволяет встроенными средствами языка T-SQL в SQL запросе импортировать данные из файла Excel в базу данных. Сегодня я подробно расскажу, как это делается, какие условия необходимо выполнить, чтобы эта операция проходила успешно, расскажу про особенности импорта для самых распространённых случаев конфигураций SQL сервера и приведу конкретный порядок действий и практические примеры.

Импорт данных из Excel в Microsoft SQL Server

Начну я с того, что импортировать данные из Excel в Microsoft SQL Server можно с помощью «Распределенных запросов» и с помощью «Связанных серверов». Это, скорей всего, Вы уже знаете, так как я уже не раз писал об этом (ссылки на соответствующие материалы указаны чуть выше).

Обратиться к файлу Excel и импортировать данные в Microsoft SQL Server можно с помощью T-SQL инструкций OPENDATASOURCE, OPENROWSET или OPENQUERY.

Однако в вышеупомянутых статьях я упустил несколько важных моментов, одним из которых является то, что у всех конфигурация SQL сервера разная, за счет чего у многих возникают различные проблемы и появляются ошибки во время выполнения распределенных запросов и обращений к связанным серверам. Также я описывал способ загрузки данных из Excel, который на сегодняшний день уже устарел, поэтому сегодня я постараюсь дать Вам немного больше информации о том, как импортировать данные из файла Excel в Microsoft SQL Server на языке T-SQL.

Содержание

  1. Введение
  2. Импорт данных из Excel 2003 (файл xls) в Microsoft SQL Server x86
  3. Шаг 1 – Проверяем наличие провайдера Microsoft.Jet.OLEDB.4.0 на SQL Server
  4. Шаг 2 – Предоставление прав пользователю на временный каталог
  5. Шаг 3 – Включаем распределенные запросы на SQL Server
  6. Шаг 4 – Выполняем SQL запрос, обращение к файлу Excel
  7. Импорт данных из Excel 2007 и выше (файл xlsx) в Microsoft SQL Server x86
  8. Шаг 1 – Проверяем наличие провайдера Microsoft.ACE.OLEDB.12.0 на SQL Server
  9. Шаг 2 – Установка провайдера Microsoft.ACE.OLEDB.12.0 (32-bit)
  10. Шаг 3 – Предоставление прав пользователю на временный каталог
  11. Шаг 4 – Включаем распределенные запросы на SQL Server
  12. Шаг 5 – Настройка провайдера Microsoft.ACE.OLEDB.12.0
  13. Шаг 6 – Выполняем SQL запрос, обращение к файлу Excel
  14. Импорт данных из Excel (любые файлы) в Microsoft SQL Server x64
  15. Шаг 1 – Проверяем наличие провайдера Microsoft.ACE.OLEDB.12.0 на SQL Server
  16. Шаг 2 – Установка провайдера Microsoft.ACE.OLEDB.12.0 (64-bit)
  17. Шаг 3 – Включаем распределенные запросы на SQL Server
  18. Шаг 4 – Настройка провайдера Microsoft.ACE.OLEDB.12.0
  19. Шаг 5 – Выполняем SQL запрос, обращение к файлу Excel
  20. Подведение итогов

Введение

Итак, как я уже сказал, очень важную роль здесь играет конфигурация SQL сервера, в частности, какая версия сервера установлена, x86 или x64.

Если говорить о последних версиях Microsoft SQL Server 2016-2019, то они только x64 и устанавливаются на 64-разрядные версии Windows.

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

Для того чтобы быстро узнать, какая версия SQL Server установлена у Вас на компьютере, можете выполнить простой SQL запрос

   
   SELECT @@VERSION;

Обращение к файлу Excel и, соответственно, импорт данных в Microsoft SQL Server происходит с помощью специальных провайдеров (поставщиков). Для работы с Excel в Microsoft SQL Server обычно используются:

  • Jet.OLEDB.4.0
  • ACE.OLEDB.12.0

Во всех примерах ниже я буду посылать простой запрос SELECT на выборку данных из Excel файла, для того чтобы проверить доступ к данным в файле Excel. Чтобы осуществить импорт данных (загрузить данные в БД), Вы можете использовать любой удобный для Вас способ, например, конструкцию SELECT INTO или INSERT INTO.

Дополнительно рекомендовано закрывать файл Excel во время обращения к нему в распределенных запросах, а также указывать путь к файлу без пробелов (хотя современный SQL сервер умеет работать с пробелами).

Импорт данных из Excel 2003 (файл xls) в Microsoft SQL Server x86

Шаг 1 – Проверяем наличие провайдера Microsoft.Jet.OLEDB.4.0 на SQL Server

Первое, с чего нам нужно начать, это проверить, зарегистрирован ли провайдер Microsoft.Jet.OLEDB.4.0 на SQL Server, так как в данном случае необходимо использовать именно этот провайдер. Это можно сделать с помощью следующей SQL инструкции

   
   EXEC sp_enum_oledb_providers;

В результирующем наборе данных должна присутствовать строка с Microsoft.Jet.OLEDB.4.0. Если такого провайдера нет, то скорей всего в системе нет установленного Excel 2003 и, соответственно, его нужно установить.

Шаг 2 – Предоставление прав пользователю на временный каталог

Особенностью распределённых запросов и работы со связанным серверами Excel в x86 версиях SQL Server является то, что независимо от имени какой учетной записи посылается SQL запрос к Excel, эта учетная запись должна иметь права на запись во временный каталог той учетной записи, под которой работает сама служба SQL Server.Так как поставщик OLE DB создает временный файл во время запроса во временном каталоге SQL Server, используя учетные данные пользователя, выполняющего запрос.

Таким образом, если служба SQL Server работает от имени или локальной, или сетевой службы, необходимо дать соответствующие права на временный каталог этих служб всем пользователям, которые будут посылать распределенные запросы и обращаться к связанному серверу Excel (если сервер работает от имени пользователя, который посылает SQL запросы, то такие права давать не требуется, они у него уже есть).

Это можно сделать с помощью встроенной утилиты командной строки icacls.

Например, для локальной службы команда будет выглядеть следующим образом.

   
   icacls C:WindowsServiceProfilesLocalServiceAppDataLocalTemp /grant UserName:(R,W)

Для сетевой службы

   
   icacls C:WindowsServiceProfilesNetworkServiceAppDataLocalTemp /grant UserName:(R,W)

Вместо UserName укажите имя пользователя, который посылает запрос.

Шаг 3 – Включаем распределенные запросы на SQL Server

По умолчанию возможность использования распределённых запросов, в частности функций OPENDATASOURCE и OPENROWSET, в Microsoft SQL Server запрещена, поэтому данную возможность нужно сначала включить.

Она включается с помощью системной хранимой процедуры sp_configure, которая отвечает за системные параметры сервера. Нам необходимо параметру Ad Hoc Distributed Queries присвоить значение 1, для этого выполняем следующую SQL инструкцию.

   
   sp_configure 'show advanced options', 1;
   RECONFIGURE;
   GO
   sp_configure 'Ad Hoc Distributed Queries', 1;
   RECONFIGURE;
   GO

Шаг 4 – Выполняем SQL запрос, обращение к файлу Excel

Ниже я приведу несколько вариантов обращения к файлу Excel (TestExcel.xls).

OPENROWSET

   
   SELECT * FROM OPENROWSET 
   ( 
    'Microsoft.Jet.OLEDB.4.0', 
    'Excel 8.0; Database=D:TestExcel.xls', 
    'SELECT * FROM [Лист1$]' 
   );

OPENDATASOURCE

   
   SELECT * FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0', 
                                'Data Source=D:TestExcel.xls; 
                                 Extended Properties=Excel 8.0')...[Лист1$];

Linked Server

   
   --Создание связанного сервера 
   EXEC sp_addlinkedserver @server = 'TEST_EXCEL', 
                           @srvproduct = 'Excel', 
                           @provider = 'Microsoft.Jet.OLEDB.4.0', 
                           @datasrc = 'D:TestExcel.xls', 
                           @provstr = 'Excel 8.0;IMEX=1;HDR=YES;';   
   
   --Настройки безопасности (авторизации) 
   EXEC dbo.sp_addlinkedsrvlogin @rmtsrvname='TEST_EXCEL', 
                                 @useself= 'False', 
                                 @locallogin=NULL, 
                                 @rmtuser=NULL, 
                                 @rmtpassword=NULL;   
   
   --Обращение к связанному серверу 
   SELECT * FROM OPENQUERY (TEST_EXCEL, 'SELECT * FROM [Лист1$]'); 
   --или 
   SELECT * FROM TEST_EXCEL...[Лист1$];

Импорт данных из Excel 2007 и выше (файл xlsx) в Microsoft SQL Server x86

Шаг 1 – Проверяем наличие провайдера Microsoft.ACE.OLEDB.12.0 на SQL Server

Точно так же, как и в предыдущем примере, сначала проверяем, установлен ли у нас необходимый нам провайдер, в данном случае нам нужен Microsoft.ACE.OLEDB.12.0.

   
   EXEC sp_enum_oledb_providers;

Шаг 2 – Установка провайдера Microsoft.ACE.OLEDB.12.0 (32-bit)

Если провайдера нет, то его необходимо установить.

Вот ссылка на скачивание провайдера

Курс по SQL для начинающих

https://www.microsoft.com/en-us/download/details.aspx?id=13255

Выберите и скачайте файл, соответствующий архитектуре x86 (т.е. в названии без x64).

Шаг 3 – Предоставление прав пользователю на временный каталог

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

Используем все ту же утилиту командной строки icacls.

Для локальной службы

    
   icacls C:WindowsServiceProfilesLocalServiceAppDataLocalTemp /grant UserName:(R,W)

Для сетевой службы

   
   icacls C:WindowsServiceProfilesNetworkServiceAppDataLocalTemp /grant UserName:(R,W)

Вместо UserName укажите имя пользователя, который посылает запрос.

Шаг 4 – Включаем распределенные запросы на SQL Server

Включаем возможность использования OPENDATASOURCE и OPENROWSET на Microsoft SQL Server, повторюсь, что по умолчанию данная возможность отключена.

   
   sp_configure 'show advanced options', 1;
   RECONFIGURE;
   GO
   sp_configure 'Ad Hoc Distributed Queries', 1;
   RECONFIGURE;
   GO

Шаг 5 – Настройка провайдера Microsoft.ACE.OLEDB.12.0

В данном случае дополнительно потребуется настроить провайдер Microsoft.ACE.OLEDB.12.0. Для этого включим следующие параметры провайдера (для отключения укажите 0 вместо 1).

   
   EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
   GO
   EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
   GO

Если не включать данные параметры, то, скорей всего, появится ошибка примерно следующего содержания

«Сообщение 7399, уровень 16, состояние 1, строка 25
Поставщик OLE DB «Microsoft.ACE.OLEDB.12.0» для связанного сервера «(null)» сообщил об ошибке. Поставщик не предоставил данных об ошибке.
Сообщение 7330, уровень 16, состояние 2, строка 25
Не удалось получить строку от поставщика OLE DB «Microsoft.ACE.OLEDB.12.0» для связанного сервера «(null)».»

Шаг 6 – Выполняем SQL запрос, обращение к файлу Excel

Примеры обращения к файлу Excel (TestExcel.xlsx).

OPENROWSET

   
   SELECT * FROM OPENROWSET
   (
    'Microsoft.ACE.OLEDB.12.0',
    'Excel 12.0;
     Database=D:TestExcel.xlsx',
     'SELECT * FROM [Лист1$]'
   );

OPENDATASOURCE

   
   SELECT * FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0',
                                'Data Source=D:TestExcel.xlsx;
                                 Extended Properties=Excel 12.0')...[Лист1$];

Linked Server

   
   --Создание связанного сервера
   EXEC sp_addlinkedserver @server = 'TEST_EXCEL',
                           @srvproduct = 'Excel',
                           @provider = 'Microsoft.ACE.OLEDB.12.0',
                           @datasrc = 'D:TestExcel.xlsx',
                           @provstr = 'Excel 12.0;IMEX=1;HDR=YES;';

   --Настройки безопасности (авторизации)
   EXEC dbo.sp_addlinkedsrvlogin @rmtsrvname='TEST_EXCEL',
                                 @useself= 'False',
                                 @locallogin=NULL,
                                 @rmtuser=NULL,
                                 @rmtpassword=NULL;
   
   --Обращение к связанному серверу
   SELECT * FROM OPENQUERY (TEST_EXCEL, 'SELECT * FROM [Лист1$]');
   --или
   SELECT * FROM TEST_EXCEL...[Лист1$];

Шаг 1 – Проверяем наличие провайдера Microsoft.ACE.OLEDB.12.0 на SQL Server

В данном случае мы также используем провайдер Microsoft.ACE.OLEDB.12.0, сначала проверяем, зарегистрирован ли он на сервере.

   
   EXEC sp_enum_oledb_providers;

Шаг 2 – Установка провайдера Microsoft.ACE.OLEDB.12.0 (64-bit)

В случае, если провайдер не установлен, его необходимо скачать и установить.

https://www.microsoft.com/en-us/download/details.aspx?id=13255

Скачиваем файл x64.

Шаг 3 – Включаем распределенные запросы на SQL Server

Необходимость включения возможности использования распределенных запросов (OPENDATASOURCE и OPENROWSET) на Microsoft SQL Server x64 также есть, поэтому сначала включаем ее, выполнив точно такую же инструкцию.

   
   sp_configure 'show advanced options', 1;
   RECONFIGURE;
   GO
   sp_configure 'Ad Hoc Distributed Queries', 1;
   RECONFIGURE;

GO

Шаг 4 – Настройка провайдера Microsoft.ACE.OLEDB.12.0

В этом случае, скорей всего, настройка провайдера не потребуется, поэтому сначала сразу пробуем выполнить SQL запросы (обратиться к данным в Excel), и если возникает ошибка (все с тем же сообщением 7399 и 7330), то пробуем включить параметры AllowInProcess и DynamicParameters (для отключения укажите 0 вместо 1).

   
   EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
   GO
   EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
   GO

Шаг 5 – Выполняем SQL запрос, обращение к файлу Excel

Здесь используются точно такие же параметры в SQL запросах, что и в предыдущем примере. Для удобства продублирую их еще раз.

Примеры обращения к файлу Excel (TestExcel.xlsx).

OPENROWSET

   
   SELECT * FROM OPENROWSET
   (
    'Microsoft.ACE.OLEDB.12.0',
    'Excel 12.0;
     Database=D:TestExcel.xlsx',
    'SELECT * FROM [Лист1$]'
   );

OPENDATASOURCE

   
   SELECT * FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0',
                                'Data Source=D:TestExcel.xlsx;
                                 Extended Properties=Excel 12.0')...[Лист1$];

Linked Server

   
   --Создание связанного сервера
   EXEC sp_addlinkedserver @server = 'TEST_EXCEL',
                           @srvproduct = 'Excel',
                           @provider = 'Microsoft.ACE.OLEDB.12.0',
                           @datasrc = 'D:TestExcel.xlsx',
                           @provstr = 'Excel 12.0;IMEX=1;HDR=YES;';
   
   --Настройки безопасности (авторизации)
   EXEC dbo.sp_addlinkedsrvlogin @rmtsrvname='TEST_EXCEL',
                                 @useself= 'False',
                                 @locallogin=NULL,
                                 @rmtuser=NULL,
                                 @rmtpassword=NULL;
   
   --Обращение к связанному серверу
   SELECT * FROM OPENQUERY (TEST_EXCEL, 'SELECT * FROM [Лист1$]');
   --или
   SELECT * FROM TEST_EXCEL...[Лист1$];

Подведение итогов

Ну и в заключение я сгруппирую действия, которые необходимо выполнять в зависимости от выпуска SQL Server (x68 или x64) и версии файла Excel (xls или xlsx), в одну таблицу, для Вашего удобства.

Действие / Настройка Импорт Excel 2003 (файл xls) в SQL Server x86 Импорт Excel 2007 (файл xlsx) в SQL Server x86 Импорт Excel (любые файлы) в SQL Server x64
Установка Excel 2003 Да Нет Нет
Установка провайдера Microsoft.ACE.OLEDB.12.0 Нет Да (x86) Да (x64)
Предоставление прав на временный каталог служб (если SQL сервер работает от имени служб) Да Да Нет
Настройка провайдера Microsoft.ACE.OLEDB.12.0 Нет Да Нет (по необходимости)
Параметры подключения в SQL запросах Microsoft.Jet. OLEDB.4.0 и Excel 8.0 Microsoft.ACE. OLEDB.12.0 и Excel 12.0 Microsoft.ACE. OLEDB.12.0 и Excel 12.0
Включение распределённых запросов на SQL Server Да Да Да

Заметка! Для комплексного изучения языка T-SQL рекомендую посмотреть мои видеокурсы по T-SQL, в которых используется последовательная методика обучения и рассматриваются все конструкции языка SQL и T-SQL.

На сегодня это все, удачи Вам в освоении языка T-SQL!

Introduction

In this article, I am going to explain to you how to import Excel sheet data to SQL server database table with examples. Here we will be using SQL Server 2019 or you can use SQL Server 2008 or above. In my current project, I am using this concept for data migration.

This concept is used for transferring data from source (Excel sheet) to destination (SQL Server). We can import a bulk amount of excel data into SQL database without using any coding.

There are two ways to import data from excel to SQL Server database. First, if you want to import all excel file data with header names in a new table. Secondly, if you want to append excel data in exiting table data without header names.

Prerequisites

SQL Server 2019 or you can use SQL server 2008 or above version.

Read my previous articles, using the below links,

  • How To Install SQL Server 2019
  • How To Install SQL Server Management Studio 2019
  • Getting Started With SQL Server 2019

Import All Excel Data With Header Names In a New Table

Step 1

Here, I have created a sample Excel data that contains employees detail data with six columns. 

How To Import Excel Data Into SQL Server 2019

Step 2

Connect To SQL Server Management Studio 2019 (SSMS) and create a database

Open your SQL Server and use the following script to create the “chittadb” Database.

Create database chittadb

How To Import Excel Data Into SQL Server 2019

Now, select the script query then press F5 or click on Execute button to execute the above script.

You should see a message, “Command(s) completed successfully.” Means your new database is created.

How To Import Excel Data Into SQL Server 2019

Database “Chittadb” created.

How To Import Excel Data Into SQL Server 2019

Step 3

Expand the database where you want to import the data. Here I want to import the data to “Chittadb” database. The database has no table now.

How To Import Excel Data Into SQL Server 2019

Right click your destination database ->Select Tasks -> Import Data

How To Import Excel Data Into SQL Server 2019

Step 4

An Import wizard pop up will open «Welcome to SQL Server Import and Export Wizard” and Click Next.

How To Import Excel Data Into SQL Server 2019

Step 5

  • Now, Select Microsoft Excel as your data source from the dropdown list.
  • Click the ‘Browse’ button to select the path to the Excel data file you want to import.
  • Select the version of the excel file (2007-2010). Is usually fine for files with a .XLS extension, or use newer files with a .XLSX extension)
  • Tick the ‘First Row has column names’ checkbox, if your excel file contains headers.
  • Click next.

How To Import Excel Data Into SQL Server 2019

Step 6

On the ‘Choose a Destination’ Screen, select destination database” SQL Server Native Client 11.0” from the dropdown, select database “chittadb”, also you can use Windows Authentication or Use SQL Server Authentication; here I am using Windows Authentication and click Next.

How To Import Excel Data Into SQL Server 2019

Step 7

Select the Radio button “Copy data from one or more tables or views”.

This step will copy the data from the data source, click next and continue.

How To Import Excel Data Into SQL Server 2019

Step 8

We can specify the table name in the following wizard. So change the destination section name «[dbo].[Sheet1$]» as «[dbo].[Tbl_Employee]» and click Next.

How To Import Excel Data Into SQL Server 2019

How To Import Excel Data Into SQL Server 2019

If you want to preview your data, Click the preview button.

How To Import Excel Data Into SQL Server 2019

Step 9

Save and Run package. Check Run immediately from checkbox and Click Next or Finish button you can get Complete the Wizard page.

How To Import Excel Data Into SQL Server 2019

Step 10

Click finish.

How To Import Excel Data Into SQL Server 2019

Step 11

The execution was successful and Click Close button.

How To Import Excel Data Into SQL Server 2019

Step 12

 Now, check database “Chittadb” and verify.

The following Output contains Id, EmpId, Name, Location, Gender and Designation as the column name and “Tbl_Employee” table also created under database “Chittadb”. Now all excel data is imported to “Tbl_Employee” table.

How To Import Excel Data Into SQL Server 2019

Conclusion

In this article, we learned how to Import Excel data into SQL Server 2019. Post your valuable feedback in the comments section. I hope this article will be useful.

Время на прочтение
6 мин

Количество просмотров 105K

Введение

Здравствуй, $habrauser!

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

загуглить

поискать решение. Увы, запрос php excel to mysql не дал ничего конкретного, или же описанные способы были довольно таки не удобны. Тогда же я решил найти библиотеку для работы с Excel на PHP, и мне попалась PHPExcel. Но опять же меня ждало разочарование, запрос phpexcel to mysql не дал ничего путного (я ленивый пользователь и дальше 1й страницы не хожу). В итоге я решил создать свой

велосипед

скрипт, которым и хочу поделиться с вами.

Начало

Итак, библиотеку я нашел, скачал и начал разбираться. Для начала нужно было подключить библиотеку и создать подключение к базе, что совсем не сложно:

require_once "PHPExcel.php";

$connection = new mysqli("localhost", "user", "pass", "base");
$connection->set_charset("utf8");

Далее нужно открыть файл Excel для чтения:

$PHPExcel_file = PHPExcel_IOFactory::load("./file.xlsx");

После открытия файла, нам нужно перебрать все листы в нем и каждый добавить в базу MySQL (можно и 1 конкретный, но об этом позже):

foreach ($PHPExcel_file->getWorksheetIterator() as $worksheet) {
    // ...
}

Ну а теперь самое интересное…

Перебор и добавление

Мы будем исходить из того, что таблицы у нас нет (или есть, но с другими данными) и ее нужно создать. Для этого нам нужно получить имена для столбцов (в соответствии с просьбой друга, имена могут находиться в 1 строчке таблицы):

// Строка для названий столбцов таблицы MySQL
$columns_str = "";
// Количество столбцов на листе Excel
$columns_count = PHPExcel_Cell::columnIndexFromString($worksheet->getHighestColumn());

// Перебираем столбцы листа Excel и генерируем строку с именами через запятую
for ($column = 0; $column < $columns_count; $column++) {
    $columns_str .= ($columns_name_on1line ? "column" . $column : $worksheet->getCellByColumnAndRow($column, 1)->getCalculatedValue()) . ",";
}

// Обрезаем строку, убирая запятую в конце
$columns_str = substr($columns_str, 0, -1);

Далее удаляем таблицу из базы, если она существовала, и создаем новую:

$connection->query("DROP TABLE IF EXISTS exceltable");
$connection->query("CREATE TABLE exceltable (" . str_replace(",", " TEXT NOT NULL,", $columns_str) . " TEXT NOT NULL)");

Как видно из кода, значения будут иметь тип TEXT. Теперь приступаем собственно к перебору ячеек и добавления их в базу. Конечно, такой алгоритм не сложно найти на просторах Stack Overflow, однако было замечено, что происходить ошибка при попытки чтения объединенных ячеек (точнее несоответствие количества столбцов и значений в запросе). Это я и решил учесть:

// Количество строк на листе Excel
$rows_count = $worksheet->getHighestRow();

// Перебираем строки листа Excel
for ($row = 1; $row <= $rows_count; $row++) {
    // Строка со значениями всех столбцов в строке листа Excel
    $value_str = "";

    // Перебираем столбцы листа Excel
    for ($column = 0; $column < $columns_count; $column++) {
        // Строка со значением объединенных ячеек листа Excel
        $merged_value = "";
        // Ячейка листа Excel
        $cell = $worksheet->getCellByColumnAndRow($column, $row);

        // Перебираем массив объединенных ячеек листа Excel
        foreach ($worksheet->getMergeCells() as $mergedCells) {
            // Если текущая ячейка - объединенная,
            if ($cell->isInRange($mergedCells)) {
                // то вычисляем значение первой объединенной ячейки, и используем её в качестве значения
                // текущей ячейки
                $merged_value = $worksheet->getCell(explode(":", $mergedCells)[0])->getCalculatedValue();
                break;
            }
        }

        // Проверяем, что ячейка не объединенная: если нет, то берем ее значение, иначе значение первой
        // объединенной ячейки
        $value_str .= "'" . (strlen($merged_value) == 0 ? $cell->getCalculatedValue() : $merged_value) . "',";
    }

    // Обрезаем строку, убирая запятую в конце
    $value_str = substr($value_str, 0, -1);

    // Добавляем строку в таблицу MySQL
    $connection->query("INSERT INTO exceltable (" . $columns_str . ") VALUES (" . $value_str . ")");
}

Все дело в функцию!

Конечно, данный скрипт был бы гораздо удобнее, если бы все объединить в функцию. Поэтому итоговый результат получается такой:

Функция excel2mysql

// Подключаем библиотеку
require_once "PHPExcel.php";

// Функция преобразования листа Excel в таблицу MySQL, с учетом объединенных строк и столбцов.
// Значения берутся уже вычисленными. Параметры:
//     $worksheet - лист Excel
//     $connection - соединение с MySQL (mysqli)
//     $table_name - имя таблицы MySQL
//     $columns_name_line - строка с именами столбцов таблицы MySQL (0 - имена типа column + n)
function excel2mysql($worksheet, $connection, $table_name, $columns_name_line = 0) {
  // Проверяем соединение с MySQL
  if (!$connection->connect_error) {
    // Строка для названий столбцов таблицы MySQL
    $columns_str = "";
    // Количество столбцов на листе Excel
    $columns_count = PHPExcel_Cell::columnIndexFromString($worksheet->getHighestColumn());

    // Перебираем столбцы листа Excel и генерируем строку с именами через запятую
    for ($column = 0; $column < $columns_count; $column++) {
      $columns_str .= ($columns_name_line == 0 ? "column" . $column : $worksheet->getCellByColumnAndRow($column, $columns_name_line)->getCalculatedValue()) . ",";
    }

    // Обрезаем строку, убирая запятую в конце
    $columns_str = substr($columns_str, 0, -1);

    // Удаляем таблицу MySQL, если она существовала
    if ($connection->query("DROP TABLE IF EXISTS " . $table_name)) {
      // Создаем таблицу MySQL
      if ($connection->query("CREATE TABLE " . $table_name . " (" . str_replace(",", " TEXT NOT NULL,", $columns_str) . " TEXT NOT NULL)")) {
        // Количество строк на листе Excel
        $rows_count = $worksheet->getHighestRow();

        // Перебираем строки листа Excel
        for ($row = $columns_name_line + 1; $row <= $rows_count; $row++) {
          // Строка со значениями всех столбцов в строке листа Excel
          $value_str = "";

          // Перебираем столбцы листа Excel
          for ($column = 0; $column < $columns_count; $column++) {
            // Строка со значением объединенных ячеек листа Excel
            $merged_value = "";
            // Ячейка листа Excel
            $cell = $worksheet->getCellByColumnAndRow($column, $row);

            // Перебираем массив объединенных ячеек листа Excel
            foreach ($worksheet->getMergeCells() as $mergedCells) {
              // Если текущая ячейка - объединенная,
              if ($cell->isInRange($mergedCells)) {
                // то вычисляем значение первой объединенной ячейки, и используем её в качестве значения
                // текущей ячейки
                $merged_value = $worksheet->getCell(explode(":", $mergedCells)[0])->getCalculatedValue();
                break;
              }
            }

            // Проверяем, что ячейка не объединенная: если нет, то берем ее значение, иначе значение первой
            // объединенной ячейки
            $value_str .= "'" . (strlen($merged_value) == 0 ? $cell->getCalculatedValue() : $merged_value) . "',";
          }

          // Обрезаем строку, убирая запятую в конце
          $value_str = substr($value_str, 0, -1);

          // Добавляем строку в таблицу MySQL
          $connection->query("INSERT INTO " . $table_name . " (" . $columns_str . ") VALUES (" . $value_str . ")");
        }
      } else {
        return false;
      }
    } else {
      return false;
    }
  } else {
    return false;
  }

  return true;
}

// Соединение с базой MySQL
$connection = new mysqli("localhost", "user", "pass", "base");
// Выбираем кодировку UTF-8
$connection->set_charset("utf8");

// Загружаем файл Excel
$PHPExcel_file = PHPExcel_IOFactory::load("./file.xlsx");

// Преобразуем первый лист Excel в таблицу MySQL
$PHPExcel_file->setActiveSheetIndex(0);
echo excel2mysql($PHPExcel_file->getActiveSheet(), $connection, "excel2mysql0", 1) ? "OKn" : "FAILn";

// Перебираем все листы Excel и преобразуем в таблицу MySQL
foreach ($PHPExcel_file->getWorksheetIterator() as $index => $worksheet) {
  echo excel2mysql($worksheet, $connection, "excel2mysql" . ($index != 0 ? $index : ""), 1) ? "OKn" : "FAILn";
}

Заключение

Что ж, надеюсь данная статья поможет вам. Ну, или, если вы захотите

изобрести свой велосипед, но только с моторчиком

написать свой скрипт, эта статья поможет вам начать.

P.S.

Это моя первая, и думаю, не последняя статья. Поэтому жду ваших советов и поправок, как тут принято, в комментариях.

Update

Вижу, все-таки, мне удалось создать небольшую дискуссию, но не все понимают, почему было сделано именно так. Постараюсь объяснить.

Во-первых: с этим должен был работать пожилой человек, которому будет трудновато объяснить как сохранить файл в CSV, при этом не потеряв данные (а такое исключать нельзя, к тому же у них свой формат на файл XLS, который приходит сверху) и, тем более, как это импортировать через phpMyAdmin (который, кстати, с версии 3.4.5 не поддерживает XLS/XLSX, советую посмотреть почему) или подобное. Так что это не подходит.

Во-вторых: все это должно быть расположено на хостинге, и установка модулей как на сервер, так и для локальных программ не подходит (к тому же там Linux, а не Windows, как некоторые подумали).

В-третьих: это дело проводится раз в полгода, однако от безделья я решил написать такую функцию, способную обобщить импорт (вдруг кому нужно).

Теперь о хорошем: переписал данную функцию в класс, исправил кое-что и добавил возможность экспорта из MySQL в Excel. Забрать можно отсюда.

Извините, что не ответил в комментариях, решил что в самой статье будет уместние.

  1. Use the LOAD DATA Statement to Import Data
  2. Method 2: Use Sqlizer.io to Import Data
  3. Method 3: Import Data Using phpMyAdmin
  4. Conclusions

Import Excel File Into a MySQL Database

This article will teach how to import an excel file into a MySQL database using Workbench, Command-Line Prompt, and phpMyAdmin. This tutorial will take you through a step-by-step guide of the top 3 easiest ways to import excel files into the MySQL databases.

Use the LOAD DATA Statement to Import Data

Using the LOAD DATA statement in MySQL Workbench, you must have an empty table in your MySQL database.

We have already created a table named tb_students. This table has id, firstname, lastname, gender, and city as column names.

We will convert our file type from .xlsx to .csv to import data into the MySQL database. To do this, open your excel file that has the data.

Click on File->Save As. Make sure that you have selected CSV (Comma delimited)(*.csv) and then press the SAVE.

See the following screenshot.

top 3 easiest ways to import excel file into mysql database - save as dot csv

You now have your data in the *.csv file. We will use the command below to import data from the .csv file into the MySQL database (using Workbench).

# MySQL Version 8.0.27
LOAD DATA INFILE
'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/top 5 easiest ways to import excel file into mysql database.csv'
INTO TABLE tb_students
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY 'n'
IGNORE 1 ROWS;

In the above LOAD DATA statement, the data from the given file will be collected and inserted into the mentioned table. The first row will be ignored (the column names) because we already have them while creating a table in MySQL Workbench.

In this example, the .csv file’s fields are terminated by a comma. Yours may be terminated by a tab or single space.

If so, replace the line FIELDS TERMINATED BY ',' with FIELDS TERMINATED BY 't' or FIELDS TERMINATED BY ' ' respectively. Let’s look at the *.csv file’s data and then the MySQL data that are given below.

Data in .CSV File:

top 3 easiest ways to import excel file into mysql database - csv file data

Data in MySQL Table:

top 3 easiest ways to import excel file into mysql database - table data in mysql

You can also use the LOAD DATA statement from Command Line (CMD). We have created a new table named tb_students_cmd to practice the command line’s LOAD DATA statement.

top 3 easiest ways to import excel file into mysql database - new table for cmd

Use the LOAD DATA statement to import data via a command-line prompt.

top 3 easiest ways to import excel file into mysql database - load data command in cmd

Let’s read the id from tb_students_cmd to confirm that the data is imported. See the following screenshot.

top 3 easiest ways to import excel file into mysql database - load data output in cmd

If you see any error about security considerations while using the LOAD DATA statement, then you may visit this website to see the possible solutions.

Method 2: Use Sqlizer.io to Import Data

This method is useful if you don’t want to convert your file type from .xlsx to .csv. Go to sqlizer.io, follow the instructions as follows (or as per your needs).

Select your excel file and MySQL database type. Tell the sqlizer.io by checking or unchecking My File has a Header Row.

Check Use CHECK IF TABLE EXISTS if you want to. If you want to use the active worksheet, check Use the active worksheet.

If not, then tell the worksheet name. We are not using it for this tutorial and prefer to tell the worksheet name, students.

Make sure to tick Convert the whole worksheet to import the whole data. Otherwise, give it the cell range.

You can write your table name (give it a unique name) in which you want the data to be imported. Then, click on the Convert My File button.

top 3 easiest ways to import excel file into mysql database - sqlizerio

You will see the following screen. You can either download the queries or copy them to execute wherever you want.

top 3 easiest ways to import excel file into mysql database - sqlizerio queries

We can see the following screenshot to confirm that the data is imported, and we can read that.

top 3 easiest ways to import excel file into mysql database - sqlizerio queries data

Method 3: Import Data Using phpMyAdmin

If you are using phpMyAdmin, then you can import data using the following steps (see the given screenshots).

To practice, we have created a new table named tb_students_phpmyadmin. It has five columns named id, firstname, lastname, gender, and city.

Click on the Import tab and select your *.csv file. The Format would be CSV, but you can select according to requirements.

Provide Format-specific Options and click on Go at the bottom-right corner.

top 3 easiest ways to import excel file into mysql database - import data using phpmyadmin part 1

top 3 easiest ways to import excel file into mysql database - import data using phpmyadmin part 2

You can see that all the records are being imported inserted in the table named tb_students_phpmyadmin as follows.

top 3 easiest ways to import excel file into mysql database - import data using phpmyadmin part 3

Let’s see whether the data is imported or not. And here it is! We have imported data.

top 3 easiest ways to import excel file into mysql database - import data using phpmyadmin part 4

Conclusions

Finally, we have concluded that you have to use different methods to import data into MySQL.

We saw two methods for importing data from the .csv file to MySQL. It includes the LOAD DATA statement (in workbench and command line) and using phpMyAdmin.

We used sqlizer.io to import data from excel files to MySQL, which is very easy to use also.

Иногда бывает проще работать с некоторыми данными в Excel, прежде чем импортировать их в базу данных MySQL.

Иногда бывает проще работать с некоторыми данными в Excel, прежде чем импортировать их в базу данных MySQL.

Для этого сделайте несколько простых шагов.

Короче: экспортируйте файл Excel в CSV и импортируйте CSV в новую таблицу с помощью PHPMyAdmininterface.

Начиная с Excel, в примере ниже один лист, содержащий некоторые данные:

Выберите «Сохранить как», чтобы выбрать другой формат.

Прокрутите вниз до формата CSV (с разделителями-запятыми) (* .csv).

Убедитесь, что некоторые функции будут потеряны — CSV является текстовым форматом, никакие особенности Excel не будут экспортироваться (функции, программы и т. Д.).

Как импортировать Excel в PHPMyAdmin

В PHPMyAdmin перейдите в меню «Импорт».

Найдите файл CSV, который был недавно сохранен, и выберите соответствующий формат:

Посмотрите на другие параметры, которые могут применяться, например, если столбцы имеют имена, проверьте соответствующий параметр «Первая строка файла содержит имена столбцов таблицы» и нажмите «Перейти»

Должно появиться подтверждение импорта, и будут показаны ссылки на полученную базу данных и таблицу.

Теперь можно просмотреть таблицу!

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

PHPMyAdmin импортировать CSV в MySQL

В PHPMyAdmin импортировать CSV-файл в MySQL довольно просто.

После того, как данные подготовлены в CSV, следуйте структуре таблицы, откройте таблицу в PHPMyAdmin, перейдите на вкладку import, найдите файл CSV для импорта на ваш компьютер, убедитесь, что формат CSV был выбран в параметре формата файла. и импортируйте файл CSV в MySQL в PHPMyAdmin.

Как импортировать Excel в MySQL PHP MyAdmin

Чтобы импортировать Excel в MySQL PHP MyAdmin, экспортируйте файл Excel в файл CSV. Затем импортируйте его в PHP MyAdmin, используя опцию файла данных CSV.

При импорте файла в MySQL из Excel прокрутите вниз до параметров «Формат» и выберите файл CSV. Это позволит преобразовать Excel в MySQL в PHP MyAdmin без необходимости что-либо программировать и просто с помощью графического интерфейса пользователя.

Узнайте, как импортировать данные Excel в базу данных MySQL

Создание базы данных в DirectAdmin

Если на вашем веб-сервере еще нет базы данных, независимо от используемого программного обеспечения для управления сервером, такого как cPanel или DirectAdmin, вам сначала необходимо создать базу данных, прежде чем вы сможете импортировать в нее какие-либо данные.

Просто перейдите на панель управления веб-пользователем и найдите экран управления MySQL. Там вы должны иметь возможность создать как базу данных, так и пользователя, который может получить доступ к этой базе данных — и то, и другое необходимо для того, чтобы иметь функциональную базу данных для вашего веб-сайта! Просто создайте его и используйте имя пользователя и пароль, выберите для подключения к базе данных и импорта экспорта, CSV или Excel в свою базу данных.

Часто Задаваемые Вопросы

Как импортировать файл Excel в PhpMyAdmin?
В PhpmyAdmin перейдите в меню «Импорт», выберите соответствующий формат: ищите другие варианты, которые могут применяться, и нажмите «Go». Затем появится подтверждение импорта, а также ссылки на полученную базу данных и таблицу.

Закончите Excel 2019 для начинающих в видео

Задача. У вас есть файл Excel – и вы хотите, чтобы эти данные были помещены в таблицу. Я покажу вам, как это делается, и мы задокументируем каждый шаг с большим количеством иллюстраций.

Прочитав этот пост, вы будете готовы с уверенностью импортировать данные в существующую таблицу из Excel. Хотите создать новую таблицу из Excel? Мы тоже можем это сделать.

В нашем примере я буду использовать таблицу HR.EMPLOYEES для создания XLS-файла для нашего импорта. Мы будем использовать этот файл Excel для заполнения пустой копии таблицы EMPLOYEES в другой схеме.

Шаг 0: Пустая таблица Oracle и ваш файл Excel

У вас есть таблица Oracle и один или несколько файлов Excel.

Шаг 1: Выбираем «Импорт данных» по правому щелчку мыши

Шаг 2: Выберите свой входной файл (XLSX) и проверьте данные

Если вы уже запускали этот мастер раньше, вы можете выбрать файлы из предыдущих сеансов.

Когда вы выберете файл, мы захватим первые 100 строк для просмотра ниже. Этот «Предел строк предварительного просмотра» определяет, сколько строк вы можете использовать для проверки ИМПОРТА по мере прохождения мастера. Вы можете увеличить его, но это потребует больше ресурсов, так что не сходите с ума.

Кроме того, есть ли в вашем файле Excel заголовки столбцов? Хотим ли мы рассматривать их как строку к таблице? Скорее всего, нет. Если вы снимите флажок «Заголовок», имена столбцов станут новой строкой в вашей таблице – и, вероятно, не будут вставлены.

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

Шаг 3: Создайте сценарий или импортируйте автоматически

По мере прохождения шагов в мастере мы будем держать панель предварительного просмотра содержимого файла под рукой, так что вам не придется нажимать  alt+tab туда и обратно от Excel до SQL Developer.

Для этого упражнения будет использоваться метод «Вставки» (Insert). Каждая строка, обработанная в файле Excel, приведет к выполнению инструкции INSERT в таблице, в которую мы импортируем.

Если вы выберете «Вставить скрипт», мастер завершит работу скриптом ВСТАВКИ на вашем листе SQL. Это хорошая альтернатива, если вы хотите настроить SQL, или если вам нужно отладить/посмотреть, почему метод «Insert» не работает.

Шаг 4: Выберите столбцы Excel для импорта

Мастер по умолчанию использует все используемые столбцы Excel в том порядке, в котором они находятся в файле.

У вас может быть файл Excel со 100 столбцами, но ваша таблица имеет только 30. Здесь вы даете команду SQL Developer, какие столбцы должны использоваться для импорта. Вы также можете изменить порядок столбцов, что может сделать следующий шаг немного проще.

Шаг 5: Сопоставьте столбцы Excel со столбцами таблицы

Левая панель представляет столбцы в файле XLS. Информация справа показывает, куда идут эти данные и как они будут обрабатываться в Oracle.

Если вы не обращаете внимания и просто позволяете Мастеру импорта делать всё по умолчанию, то сейчас самое время проснуться. Есть большая вероятность, что порядок столбцов файла Excel не будет соответствовать определению вашей таблицы. На этом шаге вы указываете SQL Developer-у, какие столбцы в электронной таблице совпадают с какими столбцами в таблице Oracle.

А помните, как мы установили это окно предварительного просмотра на 100 строк? Мы внимательно изучаем данные, ищем проблемы, пытаясь вписать их в столбец вашей таблицы. Если мы обнаружим проблему, мы пометим столбцы этими «предупреждающими» символами.

Я загрязнил свой файл Excel некоторыми намеренно ошибочными значениями, которые, как я знаю, не будут «подходить». Когда эти строки будут обнаружены в мастере, база данных их отклонит, но остальные строки будут введены.

Давайте на секунду поговорим о форматах даты и времени.

О TIMESTAMP тоже. В файле Excel у вас, вероятно, будут некоторые поля даты и времени, которые вы хотите переместить в столбцы формата  DATE или TIMESTAMP. SQL Developer обрабатывает эти значения как строки – и ВАМ нужно сообщить SQL Developer формат DATE или TIMESTAMP, чтобы иметь возможность их преобразовать.

Давайте посмотрим на HIREDATE.

Это значение «ха – ха» никогда не войдет в качестве значения HIRE_DATE – если только вы не храните ДАТЫ в VARCHAR2, — и если вы делаете это, то делаете это НЕПРАВИЛЬНО. Всегда храните ДАТЫ в формате DATE!

Видите выпадающий селектор «Формат» (Format)? SQL Developer по умолчанию установил строку формата ДАТЫ в ‘DD-MON-RR’ – мы пытаемся угадать это на основе строк, которые мы рассматриваем в этом окне предварительного просмотра 100.

Если мы ошиблись в догадках или не смогли разобраться, вам нужно будет ввести это самостоятельно. Документы Oracle могут помочь вам определить правильную модель формата ДАТЫ. Если вы видите небольшое предупреждающее изображение рядом со значениями даты на панели данных, возможно, у вас неправильный формат.

Шаг 6: Проверьте свои настройки и ВПЕРЕД!

Кнопка «Готово» запустит магию.

Нажмите на кнопку «Готово» (Finish).

Если Мастер столкнется с какими-либо проблемами при выполнении вставок, вы увидите следующее:

Помните те забавные данные, которые я поместил в файл Excel? Теперь это создает проблемы.

Я собираюсь сказать «Да», чтобы игнорировать все ошибки. Но если вам нужна КАЖДАЯ отдельная строка – вам нужно сказать «Отмена», чтобы начать все сначала. Затем вы можете либо исправить свои данные в файле Excel, либо внести изменения в свою таблицу, чтобы данные соответствовали/работали.

Нажав ‘Да», мы доберемся до конца нашей истории и наших данных!

Шаг 7: Посмотрите, Что сработало, а Что нет

Во-первых, есть ли плохие новости?

Если были строки, отклоненные базой данных, мы увидим их сейчас.

За этим диалогом находятся инструкции INSERT, которые мы пытались запустить, но не сработали. Вы можете изменить их вручную, чтобы исправить несколько записей. Но если у вас тысячи забракованных строк – лучше разобраться в файле (в источнике импорта).

Теперь давайте посмотрим на наши новые табличные данные!

Я люблю сладкий запах данных по утрам!

Обратите внимание на панель «Журнал» (Log). Там можно увиеть файл, с которым мы работали, и сколько времени потребовалось для загрузки данных.

Всё! Можно выдохнуть свободно. Импорт из файла Excel в таблицу базы данных Oracle завершен. В шапке статьи вы можете посмотреть видео инструкцию  — копию этого мануала на английском языке.

Вас заинтересует / Intresting for you:

Like this post? Please share to your friends:
  • Импорт excel в пдф
  • Импорт excel в python pandas
  • Имя массива данных в excel
  • Имя макроса vba excel
  • Имя макрокоманды в word