{"id":27678,"date":"2021-05-21T17:14:00","date_gmt":"2021-05-21T14:14:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=27678"},"modified":"2021-10-18T04:10:29","modified_gmt":"2021-10-18T01:10:29","slug":"como-ler-arquivos-csv-e-excel-em-php-usando-planilha-phpspreadsheet","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pt-pt\/como-ler-arquivos-csv-e-excel-em-php-usando-planilha-phpspreadsheet\/","title":{"rendered":"Como ler arquivos CSV e Excel em PHP usando planilha PhpSpreadsheet"},"content":{"rendered":"<p>Ao trabalhar em aplicativos da web, \u00e0s vezes nos deparamos com uma situa\u00e7\u00e3o em que precisamos importar um arquivo CSV ou Excel para o banco de dados. \u00c9 a forma preferida de importar grandes dados no banco de dados, em vez de inseri-los um por um.<\/p>\n<p><a href=\"https:\/\/phpspreadsheet.readthedocs.io\/en\/latest\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PhpSpreadsheet<\/a> \u00e9 a biblioteca que o ajuda a ler o arquivo CSV ou Excel. A biblioteca oferece suporte para leitura e grava\u00e7\u00e3o de diferentes tipos de formatos de arquivo. Abaixo est\u00e1 a captura de tela dos formatos de arquivo suportados.<\/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=\"Como ler arquivos CSV e Excel em PHP usando planilha PhpSpreadsheet\" ><\/a><\/p>\n<p>Antes de conhecer esta biblioteca, eu estava usando o m\u00e9todo <a href=\"https:\/\/php.net\/manual\/en\/function.fgetcsv.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">fgetcsv<\/a> para ler o arquivo CSV. E no caso de arquivos do Excel, eu precisava primeiro converter o Excel para CSV e depois ler usando a <code>fgetcsv()<\/code>fun\u00e7\u00e3o.<\/p>\n<p>PhpSpreadsheet simplifica essa tarefa para desenvolvedores. Usando o PhpSpreadsheet, \u00e9 mais f\u00e1cil lidar com os dados de arquivos CSV e Excel. Al\u00e9m disso, voc\u00ea n\u00e3o precisa converter o Excel em CSV para l\u00ea-lo, a biblioteca l\u00ea diretamente o arquivo do Excel.<\/p>\n<p>Dito isso, vamos dar uma olhada em como ler arquivos CSV e Excel usando PhpSpreadsheet.<\/p>\n<h3>Instala\u00e7\u00e3o<\/h3>\n<p>Para instala\u00e7\u00e3o desta biblioteca, recomendo usar o <a href=\"https:\/\/getcomposer.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Composer<\/a>. Abra o terminal no diret\u00f3rio raiz do seu projeto e execute o comando:<\/p>\n<pre><code>composer require phpoffice\/phpspreadsheet<\/code><\/pre>\n<p>Na pr\u00f3xima parte do tutorial, irei ler arquivos CSV \/ Excel e inserir seus dados no banco de dados. Para isso, criei um arquivo fict\u00edcio que cont\u00e9m colunas e dados da seguinte forma:<\/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=\"Como ler arquivos CSV e Excel em PHP usando planilha PhpSpreadsheet\" ><\/a><\/p>\n<p>Para armazenar esses detalhes, tamb\u00e9m criei uma tabela &#8216;usu\u00e1rios&#8217; no banco de dados.<\/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>Para o bem do tutorial, estou usando os dados fict\u00edcios acima. O usu\u00e1rio deve alterar a estrutura da tabela de acordo com seu conjunto de dados.<\/p>\n<p>Crie um <code>db.php<\/code>e adicione um c\u00f3digo para conex\u00e3o de banco de dados nele.<\/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>Certifique-se de substituir os marcadores de posi\u00e7\u00e3o pelos valores reais.<\/p>\n<h3>Ler arquivo CSV \/ Excel em PHP<\/h3>\n<p>Vamos fazer a codifica\u00e7\u00e3o real. Primeiro, crie um formul\u00e1rio que ter\u00e1 um bot\u00e3o de entrada e envio de arquivo. O usu\u00e1rio carrega seu arquivo CSV \/ Excel, clica no bot\u00e3o enviar. No envio, as entradas do arquivo carregado devem ser inseridas na tabela de &#8216;usu\u00e1rios&#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 seguir, o c\u00f3digo que ser\u00e1 executado no envio ser\u00e1 o seguinte.<\/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>No c\u00f3digo acima, estou descobrindo o tipo de arquivo e a base disso, estou lendo o arquivo usando as fun\u00e7\u00f5es fornecidas pela biblioteca. Voc\u00ea pode ler mais sobre isso na documenta\u00e7\u00e3o oficial <a href=\"https:\/\/phpspreadsheet.readthedocs.io\/en\/latest\/topics\/reading-and-writing-to-file\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">aqui<\/a>.<\/p>\n<p>Espero que voc\u00ea entenda como ler arquivos CSV e Excel usando o PhpSpreadsheet. Eu gostaria de ouvir seus pensamentos e sugest\u00f5es na se\u00e7\u00e3o de coment\u00e1rios abaixo.<\/p>\n<h4>Artigos relacionados<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/como-exportar-dados-do-banco-de-dados-mysql-para-excel-usando-php\/\" title=\"Como exportar dados do banco de dados MySQL para Excel usando PHP\">Como exportar dados do banco de dados MySQL para Excel usando PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/carregar-imagem-usando-a-biblioteca-a-prova-de-balas-em-php\/\" title=\"Carregar imagem usando a biblioteca \u00e0 prova de balas em PHP\">Carregar imagem usando a biblioteca \u00e0 prova de balas em PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/como-permitir-suporte-svg-no-wordpress\/\" title=\"Como permitir suporte SVG no WordPress\">Como permitir suporte SVG no WordPress<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Neste artigo, estudamos como ler arquivos CSV e Excel em PHP? Para ler esses arquivos, recomendamos o uso da biblioteca PhpSpreadsheet que permite suporte 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":[278],"tags":[848],"class_list":["post-27678","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php-9","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts\/27678","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/comments?post=27678"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts\/27678\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/media\/21909"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/media?parent=27678"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/categories?post=27678"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/tags?post=27678"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}