✅ Nowości, motywy, wtyczki WEB i WordPress. Tutaj dzielimy się wskazówkami i najlepszymi rozwiązaniami dla stron internetowych.

Jak czytać plik CSV i Excel w PHP za pomocą arkusza PHP?

256

Pracując nad aplikacjami webowymi czasami spotykamy się z sytuacją, w której musimy zaimportować do bazy plik CSV lub Excel. Jest to preferowany sposób importowania dużych danych do bazy danych, zamiast wprowadzania ich pojedynczo.

PhpSpreadsheet to biblioteka, która pomaga czytać plik CSV lub Excel. Biblioteka zapewnia obsługę odczytu i zapisu różnych typów formatów plików. Poniżej znajduje się zrzut ekranu obsługiwanych formatów plików.

Jak czytać plik CSV i Excel w PHP za pomocą arkusza PHP?

Zanim poznałem tę bibliotekę, do odczytu pliku CSV używałem metody fgetcsv. A w przypadku plików Excela musiałem najpierw przekonwertować Excel do CSV, a następnie odczytać go za pomocą fgetcsv()funkcji.

PhpSpreadsheet upraszcza to zadanie dla programistów. Korzystając z PhpSpreadsheet, łatwiej jest obsługiwać dane z plików CSV i Excel. Ponadto nie musisz konwertować programu Excel do CSV, aby go odczytać, biblioteka bezpośrednio odczytuje plik Excel.

Biorąc to pod uwagę, przyjrzyjmy się, jak czytać pliki CSV i Excel za pomocą PhpSpreadsheet.

Instalacja

Do instalacji tej biblioteki polecam skorzystać z Composera. Otwórz terminal w katalogu głównym projektu i uruchom polecenie:

composer require phpoffice/phpspreadsheet

W dalszej części samouczka zamierzam odczytać pliki CSV/Excel i wstawić ich dane do bazy danych. W tym celu stworzyłem fikcyjny plik, który zawiera kolumny i dane w następujący sposób:

Jak czytać plik CSV i Excel w PHP za pomocą arkusza PHP?

Aby przechowywać te dane, utworzyłem również tabelę „users" w bazie danych.

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;

Na potrzeby samouczka używam powyższych danych fikcyjnych. Użytkownik powinien zmienić strukturę tabeli zgodnie ze swoim zestawem danych.

Utwórz db.phpi dodaj w nim kod do połączenia z bazą danych.

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);
}

Pamiętaj, aby zastąpić symbole zastępcze rzeczywistymi wartościami.

Czytaj plik CSV/Excel w PHP

Zróbmy właściwe kodowanie. Najpierw utwórz formularz, który będzie zawierał plik wejściowy i przycisk przesyłania. Użytkownik przesyła swój plik CSV/Excel, naciśnij przycisk przesyłania. Po przesłaniu wpisy z przesłanego pliku należy umieścić w tabeli „użytkownicy”.

formularz.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>

Następnie kod, który zostanie wykonany po przesłaniu będzie następujący.

<?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')");
            }
        }
    }
}
?>

W powyższym kodzie dowiaduję się o typie pliku i na tej podstawie czytam plik korzystając z funkcji udostępnianych przez bibliotekę. Możesz przeczytać więcej na ten temat w oficjalnej dokumentacji tutaj.

Mam nadzieję, że rozumiesz, jak czytać pliki CSV i Excel za pomocą PhpSpreadsheet. Chciałbym usłyszeć wasze przemyślenia i sugestie w sekcji komentarzy poniżej.

Powiązane artykuły

Źródło nagrywania: artisansweb.net

Ta strona korzysta z plików cookie, aby poprawić Twoje wrażenia. Zakładamy, że nie masz nic przeciwko, ale możesz zrezygnować, jeśli chcesz. Akceptuję Więcej szczegółów