✅ Noticias, temas, complementos de WEB y WordPress. Aquí compartimos consejos y las mejores soluciones para sitios web.

Cómo leer archivos CSV y Excel en PHP usando PhpSpreadsheet

1.633

Mientras trabajamos en aplicaciones web, a veces nos encontramos con una situación en la que necesitamos importar un archivo CSV o Excel a la base de datos. Es una forma preferida de importar datos grandes en la base de datos en lugar de ingresarlos uno por uno.

PhpSpreadsheet es la biblioteca que le ayuda a leer el archivo CSV o Excel. La biblioteca brinda soporte para leer y escribir diferentes tipos de formatos de archivo. A continuación se muestra la captura de pantalla de los formatos de archivo compatibles.

Cómo leer archivos CSV y Excel en PHP usando PhpSpreadsheet

Antes de conocer esta biblioteca, estaba usando el método fgetcsv para leer el archivo CSV. Y en el caso de los archivos de Excel, primero necesitaba convertir Excel a CSV y luego leerlo usando la fgetcsv()función.

PhpSpreadsheet simplifica esta tarea para los desarrolladores. Con PhpSpreadsheet, es más fácil manejar los datos de archivos CSV y Excel. Además, no necesita convertir Excel a CSV para leerlo, la biblioteca lee directamente el archivo de Excel.

Dicho esto, echemos un vistazo a cómo leer archivos CSV y Excel usando PhpSpreadsheet.

Instalación

Para la instalación de esta biblioteca, recomiendo usar Composer. Abra la terminal en el directorio raíz de su proyecto y ejecute el comando:

composer require phpoffice/phpspreadsheet

En la siguiente parte del tutorial, leeré archivos CSV / Excel e insertaré sus datos en la base de datos. Para esto, creé un archivo ficticio que contiene columnas y datos de la siguiente manera:

Cómo leer archivos CSV y Excel en PHP usando PhpSpreadsheet

Para almacenar estos detalles, también creé una tabla ‘usuarios’ en la base de datos.

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;

Por el bien del tutorial, estoy usando los datos ficticios anteriores. El usuario debe cambiar la estructura de la tabla según su conjunto de datos.

Cree db.phpy agregue un código para la conexión a la base de datos.

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

Asegúrese de reemplazar los marcadores de posición con los valores reales.

Leer archivo CSV / Excel en PHP

Hagamos la codificación real. Primero, cree un formulario que tendrá una entrada de archivo y un botón de envío. El usuario carga su archivo CSV / Excel, presione el botón enviar. Al enviarlo, las entradas del archivo cargado deben insertarse en la tabla de ‘usuarios’.

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>

A continuación, el código que se ejecutará en el envío será el siguiente.

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

En el código anterior, estoy averiguando el tipo de archivo y la base de lo que estoy leyendo el archivo utilizando las funciones proporcionadas por la biblioteca. Puede leer más sobre esto en la documentación oficial aquí.

Espero que comprenda cómo leer archivos CSV y Excel usando PhpSpreadsheet. Me gustaría escuchar sus pensamientos y sugerencias en la sección de comentarios a continuación.

Artículos relacionados

Fuente de grabación: artisansweb.net

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More