{"id":28688,"date":"2021-06-17T11:44:00","date_gmt":"2021-06-17T08:44:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=28688"},"modified":"2021-10-18T03:59:11","modified_gmt":"2021-10-18T00:59:11","slug":"como-ler-e-escrever-arquivos-de-planilha-em-php","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pt-pt\/como-ler-e-escrever-arquivos-de-planilha-em-php\/","title":{"rendered":"Como ler e escrever arquivos de planilha em PHP"},"content":{"rendered":"<p>Ao trabalhar em aplicativos da web, muitas vezes nos deparamos com uma situa\u00e7\u00e3o em que precisamos brincar com arquivos de planilha. Podemos querer ler dados de planilhas e process\u00e1-los. \u00c0s vezes, tamb\u00e9m \u00e9 necess\u00e1rio criar e escrever arquivos de planilha.<\/p>\n<p>Neste artigo, estudamos como ler e escrever arquivos de planilha em PHP. O c\u00f3digo que vamos explicar funcionar\u00e1 em 3 tipos de planilhas &#8211; CSV, XLSX e ODS.<\/p>\n<h3>Come\u00e7ando<\/h3>\n<p>Como desenvolvedor, gostaria de experimentar diferentes pacotes que podem ser \u00fateis para resolver problemas do mundo real. Recentemente, encontrei um pacote chamado <a href=\"https:\/\/github.com\/box\/spout\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">caixa \/ bico<\/a>. Gostei da forma como a biblioteca executou as tarefas. Usando esta biblioteca, voc\u00ea pode processar arquivos de planilha com apenas algumas linhas de c\u00f3digo.<\/p>\n<p>Esta biblioteca \u00e9 capaz de processar arquivos de qualquer tamanho. Pode ser que voc\u00ea esteja lidando com um arquivo grande. Durante o processo, o arquivo grande n\u00e3o deve consumir a mem\u00f3ria e cria um problema de desempenho. A biblioteca do Spout resolve esse problema. Ele precisa de apenas 3 MB de mem\u00f3ria para processar qualquer arquivo.<\/p>\n<p>Antes de come\u00e7ar, seu servidor deve atender aos requisitos abaixo.<\/p>\n<ul>\n<li>PHP vers\u00e3o 7.2 ou superior<\/li>\n<li>Extens\u00e3o PHP <code>php_zip<\/code>habilitada<\/li>\n<li>Extens\u00e3o PHP <code>php_xmlreader<\/code>habilitada<\/li>\n<\/ul>\n<p>O usu\u00e1rio pode verificar se todos os requisitos acima foram atendidos em seu servidor usando o <code>phpinfo()<\/code>m\u00e9todo. Crie um arquivo PHP tempor\u00e1rio e coloque a instru\u00e7\u00e3o abaixo nele.<\/p>\n<p>Agora execute este arquivo PHP no navegador e voc\u00ea ver\u00e1 as configura\u00e7\u00f5es do PHP como vers\u00e3o, extens\u00f5es, etc. Voc\u00ea deve ver <code>xmlreader<\/code>e as <code>zip<\/code>extens\u00f5es est\u00e3o habilitadas conforme mostrado na imagem abaixo.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20182-6081c957ae160.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-20182-6081c957ae160.png\" alt=\"Como ler e escrever arquivos de planilha em PHP\" ><\/a><\/p>\n<p>Depois de atender aos requisitos, instale o <code>box\/spout<\/code>pacote por meio do comando abaixo.<\/p>\n<pre><code>composer require box\/spout<\/code><\/pre>\n<h3>Ler e escrever arquivos de planilha em PHP<\/h3>\n<p>O pacote Spout permite que voc\u00ea interaja com arquivos XLSX, CSV e ODS. Por exemplo, estou escrevendo um c\u00f3digo para arquivos XLSX.<\/p>\n<p>Crie um arquivo XLSX de amostra <code>users.xlsx<\/code>no diret\u00f3rio raiz e adicione algumas entradas fict\u00edcias a ele. No meu caso, o arquivo tem entradas abaixo.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20182-6081c95872223.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-20182-6081c95872223.png\" alt=\"Como ler e escrever arquivos de planilha em PHP\" ><\/a><\/p>\n<p>A seguir, escreverei um c\u00f3digo em <code>reader.php<\/code>arquivo que ler\u00e1 <code>users.xlsx<\/code>e imprimir\u00e1 os dados nele.<\/p>\n<p><strong>reader.php<\/strong><\/p>\n<pre><code>&lt;?php\nrequire_once 'vendor\/autoload.php';\n\u00a0\nuse BoxSpoutReaderCommonCreatorReaderEntityFactory;\n\u00a0\n$filePath = getcwd().'\/users.xlsx';\n\u00a0\n$reader = ReaderEntityFactory::createReaderFromFile($filePath);\n\u00a0\n$reader-&gt;open($filePath);\n\u00a0\nforeach ($reader-&gt;getSheetIterator() as $sheet) {\n\u00a0\u00a0\u00a0\u00a0foreach ($sheet-&gt;getRowIterator() as $row) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$cells = $row-&gt;getCells();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0foreach ($cells as $cell) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo $cell-&gt;getValue();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0}\n}\n\u00a0\n$reader-&gt;close();<\/code><\/pre>\n<p>\u00c9 simples assim. V\u00e1 em frente e experimente.<\/p>\n<p>Por outro lado, podemos criar facilmente um arquivo XLSX e gravar dados nele. Vamos criar um arquivo <code>writer.php<\/code>e adicionar o c\u00f3digo abaixo nele.<\/p>\n<p><strong>escritor.php<\/strong><\/p>\n<pre><code>&lt;?php\nrequire_once 'vendor\/autoload.php';\n\u00a0\nuse BoxSpoutWriterCommonCreatorWriterEntityFactory;\nuse BoxSpoutCommonEntityRow;\n\u00a0\n$filePath = getcwd().'\/new-users.xlsx';\n\u00a0\n$writer = WriterEntityFactory::createXLSXWriter();\n\u00a0\n$writer-&gt;openToFile($filePath);\n\u00a0\n\/\/ Here is data for XLSX file\n$data = [\n\u00a0\u00a0\u00a0\u00a0['Name', 'Email'],\n\u00a0\u00a0\u00a0\u00a0['Steve', 'steve@test.com'],\n\u00a0\u00a0\u00a0\u00a0['David', 'david@test.com'],\n];\n\u00a0\nforeach ($data as $d) {\n\u00a0\u00a0\u00a0\u00a0$cells = [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0WriterEntityFactory::createCell($d[0]),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0WriterEntityFactory::createCell($d[1]),\n\u00a0\u00a0\u00a0\u00a0];\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$singleRow = WriterEntityFactory::createRow($cells);\n\u00a0\u00a0\u00a0\u00a0$writer-&gt;addRow($singleRow);\n}\n\u00a0\n$writer-&gt;close();<\/code><\/pre>\n<p>O c\u00f3digo acima cria um <code>new-users.xlsx<\/code>arquivo em seu diret\u00f3rio raiz. Se voc\u00ea abrir este arquivo, ver\u00e1 que algumas linhas (usadas no c\u00f3digo) foram inseridas nele.<\/p>\n<p>No caso de arquivos CSV e ODS, voc\u00ea precisa criar um <code>$writer<\/code>objeto da seguinte maneira.<\/p>\n<pre><code>$filePath = getcwd().'\/new-users.ods';\n$writer = WriterEntityFactory::createODSWriter();\n\u00a0\n$filePath = getcwd().'\/new-users.csv';\n$writer = WriterEntityFactory::createCSVWriter();<\/code><\/pre>\n<p>Espero que voc\u00ea entenda como ler e escrever arquivos de planilha em PHP. 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-ler-arquivos-csv-e-excel-em-php-usando-planilha-phpspreadsheet\/\" title=\"Como ler arquivos CSV e Excel em PHP usando planilha PhpSpreadsheet\">Como ler arquivos CSV e Excel em PHP usando planilha PhpSpreadsheet<\/a><\/li>\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\/como-converter-html-para-pdf-em-php\/\" title=\"Como converter HTML para PDF em PHP\">Como converter HTML para PDF em PHP<\/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>Voc\u00ea quer saber como ler e escrever arquivos de planilha em PHP? Neste artigo, estudamos como interagir com arquivos de planilha usando<\/p>\n","protected":false},"author":1,"featured_media":20183,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[278],"tags":[848],"class_list":["post-28688","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\/28688","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=28688"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts\/28688\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/media\/20183"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/media?parent=28688"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/categories?post=28688"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/tags?post=28688"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}