Come leggere file CSV ed Excel in PHP utilizzando PhpSpreadsheet
Durante il lavoro su applicazioni Web, a volte ci imbattiamo in una situazione in cui è necessario importare un file CSV o Excel nel database. È un modo preferito per importare dati di grandi dimensioni nel database piuttosto che inserirli uno per uno.
PhpSpreadsheet è la libreria che ti aiuta a leggere il file CSV o Excel. La libreria fornisce supporto per la lettura e la scrittura di diversi tipi di formati di file. Di seguito è riportato lo screenshot dei formati di file supportati.
Prima di conoscere questa libreria, stavo usando il metodo fgetcsv per leggere il file CSV. E nel caso dei file Excel, dovevo prima convertire Excel in CSV e poi leggerlo usando la fgetcsv()
funzione.
PhpSpreadsheet semplifica questo compito per gli sviluppatori. Utilizzando PhpSpreadsheet, è più facile gestire i dati da file CSV ed Excel. Inoltre, non è necessario convertire Excel in CSV per leggerlo, la libreria legge direttamente il file Excel.
Detto questo, diamo un’occhiata a come leggere i file CSV ed Excel usando PhpSpreadsheet.
Installazione
Per l’installazione di questa libreria, consiglio di utilizzare Composer. Apri il terminale nella directory principale del tuo progetto ed esegui il comando:
composer require phpoffice/phpspreadsheet
Nella parte successiva del tutorial, leggerò i file CSV/Excel e inserirò i loro dati nel database. Per questo, ho creato un file fittizio che contiene colonne e dati come segue:
Per memorizzare questi dettagli, ho anche creato una tabella "utenti" nel database.
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;
Per motivi di tutorial, sto usando i dati fittizi di cui sopra. L’utente deve modificare la struttura della tabella in base al proprio set di dati.
Crea un db.php
e aggiungi un codice per la connessione al database in esso.
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);
}
Assicurati di sostituire i segnaposto con i valori effettivi.
Leggi file CSV/Excel in PHP
Facciamo la codifica vera e propria. Innanzitutto, crea un modulo che avrà un input di file e un pulsante di invio. L’utente carica il proprio file CSV/Excel, premere il pulsante di invio. Al momento dell’invio, le voci del file caricato devono essere inserite nella tabella "utenti".
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>
Successivamente, il codice che verrà eseguito sull’invio sarà il seguente.
<?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')");
}
}
}
}
?>
Nel codice sopra, sto scoprendo il tipo di file e la base di ciò che sto leggendo il file utilizzando le funzioni fornite dalla libreria. Puoi leggere di più su questo nella documentazione ufficiale qui.
Spero che tu capisca come leggere i file CSV ed Excel usando PhpSpreadsheet. Mi piacerebbe sentire i tuoi pensieri e suggerimenti nella sezione commenti qui sotto.
articoli Correlati
- Come esportare i dati del database MySQL in Excel utilizzando PHP
- Carica l’immagine usando la libreria antiproiettile in PHP
- Come consentire il supporto SVG in WordPress