WEB и WordPress новости, темы, плагины. Здесь мы делимся советами и лучшими решениями для сайтов.

Как читать файлы CSV и Excel на PHP с помощью PhpSpreadsheet

1 227

Работая над веб-приложениями, иногда мы сталкиваемся с ситуацией, когда нам нужно импортировать файл CSV или Excel в базу данных. Это предпочтительный способ импортировать большие данные в базу данных, а не вводить их по одному.

PhpSpreadsheet – это библиотека, которая помогает вам читать файл CSV или Excel. Библиотека обеспечивает поддержку чтения и записи различных типов файловых форматов. Ниже приведен снимок экрана с поддерживаемыми форматами файлов.

Как читать файлы CSV и Excel на PHP с помощью PhpSpreadsheet

Прежде чем я познакомился с этой библиотекой, я использовал метод fgetcsv для чтения файла CSV. А в случае файлов Excel мне нужно было сначала преобразовать Excel в CSV, а затем прочитать его с помощью fgetcsv()функции.

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

При этом давайте посмотрим, как читать файлы CSV и Excel с помощью PhpSpreadsheet.

Монтаж

Для установки этой библиотеки рекомендую использовать Composer. Откройте терминал в корневом каталоге вашего проекта и выполните команду:

composer require phpoffice/phpspreadsheet

В следующей части руководства я собираюсь прочитать файлы CSV / Excel и вставить их данные в базу данных. Для этого я создал фиктивный файл, который содержит следующие столбцы и данные:

Как читать файлы CSV и Excel на PHP с помощью PhpSpreadsheet

Чтобы сохранить эти данные, я также создал в базе данных таблицу «пользователи».

CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(255) DEFAULT NULL,
 `email` varchar(255) DEFAULT NULL,
 PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

В качестве учебного пособия я использую приведенные выше фиктивные данные. Пользователь должен изменить структуру таблицы в соответствии со своим набором данных.

Создайте db.phpи добавьте в него код для подключения к базе данных.

db.php

<?php
$db_host = 'DB_HOST';
$db_username = 'DB_USERNAME';
$db_password = 'DB_PASSWORD';
$db_name = 'DB_NAME';
  
$db = new mysqli($db_host, $db_username, $db_password, $db_name);
  
if($db->connect_error){
    die("Unable to connect database: ". $db->connect_error);
}

Обязательно замените заполнители фактическими значениями.

Читать файл CSV / Excel в PHP

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

form.php

<form method="post" enctype="multipart/form-data">
    <div class="form-group">
        <label for="exampleInputFile">File Upload</label>
        <input type="file" name="file" class="form-control" id="exampleInputFile">
    </div>
    <button type="submit" name="submit" class="btn btn-primary">Submit</button>
</form>

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

<?php
require_once 'vendor/autoload.php';
require_once 'db.php';
  
use PhpOfficePhpSpreadsheetSpreadsheet;
use PhpOfficePhpSpreadsheetReaderCsv;
use PhpOfficePhpSpreadsheetReaderXlsx;
  
if (isset($_POST['submit'])) {
 
    $file_mimes = array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv', 'text/x-csv', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel', 'text/plain', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
     
    if(isset($_FILES['file']['name']) && in_array($_FILES['file']['type'], $file_mimes)) {
     
        $arr_file = explode('.', $_FILES['file']['name']);
        $extension = end($arr_file);
     
        if('csv' == $extension) {
            $reader = new PhpOfficePhpSpreadsheetReaderCsv();
        } else {
            $reader = new PhpOfficePhpSpreadsheetReaderXlsx();
        }
 
        $spreadsheet = $reader->load($_FILES['file']['tmp_name']);
 
        $sheetData = $spreadsheet->getActiveSheet()->toArray();
 
        if (!empty($sheetData)) {
            for ($i=1; $i<count($sheetData); $i++) {
                $name = $sheetData[$i][1];
                $email = $sheetData[$i][2];
                $db->query("INSERT INTO USERS(name, email) VALUES('$name', '$email')");
            }
        }
    }
}
?>

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

Надеюсь, вы понимаете, как читать файлы CSV и Excel с помощью PhpSpreadsheet. Я хотел бы услышать ваши мысли и предложения в разделе комментариев ниже.

Статьи по Теме

Источник записи: artisansweb.net

Этот веб-сайт использует файлы cookie для улучшения вашего опыта. Мы предполагаем, что вы согласны с этим, но вы можете отказаться, если хотите. Принимаю Подробнее