{"id":28171,"date":"2021-05-21T16:49:00","date_gmt":"2021-05-21T13:49:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=28171"},"modified":"2021-10-17T16:52:04","modified_gmt":"2021-10-17T13:52:04","slug":"como-leer-archivos-csv-y-excel-en-php-usando-phpspreadsheet","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/es\/como-leer-archivos-csv-y-excel-en-php-usando-phpspreadsheet\/","title":{"rendered":"C\u00f3mo leer archivos CSV y Excel en PHP usando PhpSpreadsheet"},"content":{"rendered":"<p>Mientras trabajamos en aplicaciones web, a veces nos encontramos con una situaci\u00f3n 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.<\/p>\n<p><a href=\"https:\/\/phpspreadsheet.readthedocs.io\/en\/latest\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PhpSpreadsheet<\/a> 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\u00f3n se muestra la captura de pantalla de los formatos de archivo compatibles.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20521-6081ff1d2ea20.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20521-6081ff1d2ea20.png\" alt=\"C\u00f3mo leer archivos CSV y Excel en PHP usando PhpSpreadsheet\" ><\/a><\/p>\n<p>Antes de conocer esta biblioteca, estaba usando el m\u00e9todo <a href=\"https:\/\/php.net\/manual\/en\/function.fgetcsv.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">fgetcsv<\/a> 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 <code>fgetcsv()<\/code>funci\u00f3n.<\/p>\n<p>PhpSpreadsheet simplifica esta tarea para los desarrolladores. Con PhpSpreadsheet, es m\u00e1s f\u00e1cil manejar los datos de archivos CSV y Excel. Adem\u00e1s, no necesita convertir Excel a CSV para leerlo, la biblioteca lee directamente el archivo de Excel.<\/p>\n<p>Dicho esto, echemos un vistazo a c\u00f3mo leer archivos CSV y Excel usando PhpSpreadsheet.<\/p>\n<h3>Instalaci\u00f3n<\/h3>\n<p>Para la instalaci\u00f3n de esta biblioteca, recomiendo usar <a href=\"https:\/\/getcomposer.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Composer<\/a>. Abra la terminal en el directorio ra\u00edz de su proyecto y ejecute el comando:<\/p>\n<pre><code>composer require phpoffice\/phpspreadsheet<\/code><\/pre>\n<p>En la siguiente parte del tutorial, leer\u00e9 archivos CSV \/ Excel e insertar\u00e9 sus datos en la base de datos. Para esto, cre\u00e9 un archivo ficticio que contiene columnas y datos de la siguiente manera:<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20521-6081ff1d8f648.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20521-6081ff1d8f648.png\" alt=\"C\u00f3mo leer archivos CSV y Excel en PHP usando PhpSpreadsheet\" ><\/a><\/p>\n<p>Para almacenar estos detalles, tambi\u00e9n cre\u00e9 una tabla &#8216;usuarios&#8217; en la base de datos.<\/p>\n<pre><code>CREATE TABLE `users` (\u00a0`id` int(11) NOT NULL AUTO_INCREMENT,\n\u00a0`name` varchar(255) DEFAULT NULL,\n\u00a0`email` varchar(255) DEFAULT NULL,\n\u00a0PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;<\/code><\/pre>\n<p>Por el bien del tutorial, estoy usando los datos ficticios anteriores. El usuario debe cambiar la estructura de la tabla seg\u00fan su conjunto de datos.<\/p>\n<p>Cree <code>db.php<\/code>y agregue un c\u00f3digo para la conexi\u00f3n a la base de datos.<\/p>\n<p><strong>db.php<\/strong><\/p>\n<pre><code>&lt;?php\n$db_host = 'DB_HOST';\n$db_username = 'DB_USERNAME';\n$db_password = 'DB_PASSWORD';\n$db_name = 'DB_NAME';\n\u00a0\u00a0\n$db = new mysqli($db_host, $db_username, $db_password, $db_name);\n\u00a0\u00a0\nif($db-&gt;connect_error){\n\u00a0\u00a0\u00a0\u00a0die(\"Unable to connect database: \". $db-&gt;connect_error);\n}<\/code><\/pre>\n<p>Aseg\u00farese de reemplazar los marcadores de posici\u00f3n con los valores reales.<\/p>\n<h3>Leer archivo CSV \/ Excel en PHP<\/h3>\n<p>Hagamos la codificaci\u00f3n real. Primero, cree un formulario que tendr\u00e1 una entrada de archivo y un bot\u00f3n de env\u00edo. El usuario carga su archivo CSV \/ Excel, presione el bot\u00f3n enviar. Al enviarlo, las entradas del archivo cargado deben insertarse en la tabla de &#8216;usuarios&#8217;.<\/p>\n<p><strong>form.php<\/strong><\/p>\n<pre><code>&lt;form method=\"post\" enctype=\"multipart\/form-data\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;div class=\"form-group\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;label for=\"exampleInputFile\"&gt;File Upload&lt;\/label&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;input type=\"file\" name=\"file\" class=\"form-control\" id=\"exampleInputFile\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;button type=\"submit\" name=\"submit\" class=\"btn btn-primary\"&gt;Submit&lt;\/button&gt;\n&lt;\/form&gt;<\/code><\/pre>\n<p>A continuaci\u00f3n, el c\u00f3digo que se ejecutar\u00e1 en el env\u00edo ser\u00e1 el siguiente.<\/p>\n<pre><code>&lt;?php\nrequire_once 'vendor\/autoload.php';\nrequire_once 'db.php';\n\u00a0\u00a0\nuse PhpOfficePhpSpreadsheetSpreadsheet;\nuse PhpOfficePhpSpreadsheetReaderCsv;\nuse PhpOfficePhpSpreadsheetReaderXlsx;\n\u00a0\u00a0\nif (isset($_POST['submit'])) {\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$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');\n\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0if(isset($_FILES['file']['name']) &amp;&amp; in_array($_FILES['file']['type'], $file_mimes)) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$arr_file = explode('.', $_FILES['file']['name']);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$extension = end($arr_file);\n\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if('csv' == $extension) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$reader = new PhpOfficePhpSpreadsheetReaderCsv();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} else {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$reader = new PhpOfficePhpSpreadsheetReaderXlsx();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$spreadsheet = $reader-&gt;load($_FILES['file']['tmp_name']);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$sheetData = $spreadsheet-&gt;getActiveSheet()-&gt;toArray();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if (!empty($sheetData)) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0for ($i=1; $i&lt;count($sheetData); $i++) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$name = $sheetData[$i][1];\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$email = $sheetData[$i][2];\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$db-&gt;query(\"INSERT INTO USERS(name, email) VALUES('$name', '$email')\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0}\n}\n?&gt;<\/code><\/pre>\n<p>En el c\u00f3digo 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\u00e1s sobre esto en la documentaci\u00f3n oficial <a href=\"https:\/\/phpspreadsheet.readthedocs.io\/en\/latest\/topics\/reading-and-writing-to-file\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">aqu\u00ed<\/a>.<\/p>\n<p>Espero que comprenda c\u00f3mo leer archivos CSV y Excel usando PhpSpreadsheet. Me gustar\u00eda escuchar sus pensamientos y sugerencias en la secci\u00f3n de comentarios a continuaci\u00f3n.<\/p>\n<h4>Art\u00edculos relacionados<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/es\/como-exportar-datos-de-bases-de-datos-mysql-a-excel-usando-php\/\" title=\"C\u00f3mo exportar datos de bases de datos MySQL a Excel usando PHP\">C\u00f3mo exportar datos de bases de datos MySQL a Excel usando PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/es\/cargar-imagen-usando-la-biblioteca-bulletproof-en-php\/\" title=\"Cargar imagen usando la biblioteca a prueba de balas en PHP\">Cargar imagen usando la biblioteca a prueba de balas en PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/es\/como-permitir-la-compatibilidad-con-svg-en-wordpress\/\" title=\"C\u00f3mo permitir la compatibilidad con SVG en WordPress\">C\u00f3mo permitir la compatibilidad con SVG en WordPress<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>En este art\u00edculo, estudiamos c\u00f3mo leer archivos CSV y Excel en PHP. Para leer estos archivos, recomendamos utilizar la biblioteca PhpSpreadsheet que permite el soporte para<\/p>\n","protected":false},"author":1,"featured_media":21909,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[271],"tags":[849],"class_list":["post-28171","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/posts\/28171","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/comments?post=28171"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/posts\/28171\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/media\/21909"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/media?parent=28171"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/categories?post=28171"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/tags?post=28171"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}