...
✅ WEB- ja WordPress -uutiset, -teemat, -laajennukset. Täällä jaamme vinkkejä ja parhaita verkkosivustoratkaisuja.

Kuinka lukea CSV- ja Excel-tiedostoja PHP: ssä PhpSpreadsheetin avulla

29

Verkkosovellusten parissa työskentelemme joskus tilanteessa, jossa meidän on tuotava CSV- tai Excel-tiedosto tietokantaan. Se on suositeltava tapa tuoda suuria tietoja tietokantaan sen sijaan, että syötät ne yksitellen.

PhpSpreadsheet on kirjasto, jonka avulla voit lukea CSV- tai Excel-tiedostoja. Kirjasto tarjoaa tukea erityyppisten tiedostomuotojen lukemiseen ja kirjoittamiseen. Alla on kuvakaappaus tuetuista tiedostomuodoista.

Kuinka lukea CSV- ja Excel-tiedostoja PHP: ssä PhpSpreadsheetin avulla

Ennen kuin tutustuin tähän kirjastoon, käytin fgetcsv- menetelmää CSV-tiedoston lukemiseen. Ja Excel-tiedostojen tapauksessa minun piti muuntaa Excel ensin CSV: ksi ja sitten lukea se fgetcsv()toiminnolla.

PhpSpreadsheet yksinkertaistaa tätä tehtävää kehittäjille. PhpSpreadsheetin avulla CSV- ja Excel-tiedostojen tietojen käsittely on helpompaa. Lisäksi sinun ei tarvitse muuntaa Exceliä CSV: ksi sen lukemista varten, kirjasto lukee suoraan Excel-tiedoston.

Katsotaanpa, miten luemme CSV- ja Excel-tiedostoja PhpSpreadsheetin avulla.

Asennus

Tämän kirjaston asentamiseen suosittelen Composerin käyttöä. Avaa pääte projektin juurihakemistossa ja suorita komento:

composer require phpoffice/phpspreadsheet

Opetusohjelman seuraavassa osassa aion lukea CSV / Excel-tiedostoja ja lisätä niiden tiedot tietokantaan. Tätä varten loin nuken, joka sisältää sarakkeita ja tietoja seuraavasti:

Kuinka lukea CSV- ja Excel-tiedostoja PHP: ssä PhpSpreadsheetin avulla

Näiden tietojen tallentamiseksi olen myös luonut taulukon "käyttäjät" tietokantaan.

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;

Opetusohjelman vuoksi käytän yllä olevia nuken tietoja. Käyttäjän tulisi muuttaa taulukon rakennetta tietojoukkonsa mukaan.

Luo db.phpja lisää siihen tietokantayhteyden koodi.

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

Muista korvata paikkamerkit todellisilla arvoilla.

Lue CSV / Excel-tiedosto PHP: ssä

Tehdään todellinen koodaus. Luo ensin lomake, jossa on tiedoston syöttö- ja lähetyspainike. Käyttäjä lataa CSV / Excel-tiedostonsa ja paina Lähetä-painiketta. Lähetettäessä ladatun tiedoston merkinnät tulisi lisätä käyttäjien taulukkoon.

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>

Seuraavaksi lähetykseen suoritettava koodi on seuraava.

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

Yllä olevasta koodista selvitän tiedostotyypin ja sen perustan, jonka luen tiedoston kirjaston tarjoamien toimintojen avulla. Voit lukea lisää tästä virallisista asiakirjoista täältä.

Toivon, että ymmärrät kuinka lukea CSV- ja Excel-tiedostoja PhpSpreadsheetin avulla. Haluaisin kuulla ajatuksesi ja ehdotuksesi alla olevassa kommenttiosassa.

Aiheeseen liittyvät artikkelit

Tämä verkkosivusto käyttää evästeitä parantaakseen käyttökokemustasi. Oletamme, että olet kunnossa, mutta voit halutessasi kieltäytyä. Hyväksyä Lisätietoja