{"id":27806,"date":"2021-05-25T11:23:00","date_gmt":"2021-05-25T08:23:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=27806"},"modified":"2021-10-18T04:09:29","modified_gmt":"2021-10-18T01:09:29","slug":"como-exportar-dados-do-banco-de-dados-mysql-para-excel-usando-php","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pt-pt\/como-exportar-dados-do-banco-de-dados-mysql-para-excel-usando-php\/","title":{"rendered":"Como exportar dados do banco de dados MySQL para Excel usando PHP"},"content":{"rendered":"<p>Recentemente publiquei um artigo <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> e um dos leitores perguntou sobre a exporta\u00e7\u00e3o de registros de banco de dados MySQL para arquivo Excel. O usu\u00e1rio pode precisar de seus dados no arquivo Excel ou CSV para que possa ler ou compartilhar facilmente. Neste artigo, discutimos como \u00e9 poss\u00edvel exportar dados de um banco de dados para arquivos Excel e CSV. Al\u00e9m disso, estudaremos tamb\u00e9m como enviar este arquivo exportado como anexo no e-mail.<\/p>\n<h3>Come\u00e7ando<\/h3>\n<p>Para come\u00e7ar, primeiro voc\u00ea precisa instalar a biblioteca <a href=\"https:\/\/phpspreadsheet.readthedocs.io\/en\/latest\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PhpSpreadsheet<\/a>. Recomendo usar o <a href=\"https:\/\/getcomposer.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Composer<\/a> para instala\u00e7\u00e3o da biblioteca. 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>PhpSpreadsheet \u00e9 a biblioteca que fornece 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-20480-6081f88658855.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-20480-6081f88658855.png\" alt=\"Como exportar dados do banco de dados MySQL para Excel usando PHP\" ><\/a><\/p>\n<p>Nosso objetivo final \u00e9 exportar os registros da tabela do banco de dados para um arquivo Excel \/ CSV. Estou tomando a tabela de &#8216;produtos&#8217; como exemplo. Vamos criar uma tabela &#8216;produtos&#8217; no banco de dados executando a consulta abaixo.<\/p>\n<pre><code>CREATE TABLE `products` (\u00a0`id` int(11) NOT NULL AUTO_INCREMENT,\n\u00a0`product_name` varchar(255) NOT NULL,\n\u00a0`product_sku` varchar(255) NOT NULL,\n\u00a0`product_price` varchar(255) NOT NULL,\n\u00a0PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;<\/code><\/pre>\n<p>Em seguida, adicione algumas entradas fict\u00edcias na tabela para ver alguns registros no arquivo exportado.<\/p>\n<pre><code>INSERT INTO `products` (`id`, `product_name`, `product_sku`, `product_price`) VALUES\n(1, 'Apple', 'app_111', '$1000'),\n(2, 'Lenovo', 'len_222', '$999'),\n(3, 'Samsung', 'sam_689', '$1200'),\n(4, 'Acer', 'ace_620', '$900');<\/code><\/pre>\n<p>Depois disso, crie um <code>db.php<\/code>arquivo onde escrever\u00edamos a conex\u00e3o do banco de dados.<\/p>\n<p><strong>db.php<\/strong><\/p>\n<pre><code>&lt;?php\n$db_host = 'DATABASE_HOST';\n$db_username = 'DATABASE_USERNAME';\n$db_password = 'DATABASE_PASSWORD';\n$db_name = 'DATABASE_NAME';\n\u00a0\n$db = new mysqli($db_host, $db_username, $db_password, $db_name);\n\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 no c\u00f3digo acima. Na pr\u00f3xima parte do tutorial, alocarei uma se\u00e7\u00e3o separada sobre a exporta\u00e7\u00e3o de dados para Excel, para CSV, e envio de e-mail com um arquivo exportado como anexo.<\/p>\n<h3>Exportar dados do banco de dados MySQL para Excel usando PHP<\/h3>\n<p>Voc\u00ea instalou a biblioteca e est\u00e1 pronto com uma tabela de banco de dados com entradas fict\u00edcias. Agora voc\u00ea pode prosseguir e escrever o c\u00f3digo real que exportar\u00e1 um arquivo Excel com os dados preenchidos.<\/p>\n<p>Crie um <code>index.php<\/code>arquivo no diret\u00f3rio raiz. Neste arquivo, gravarei uma consulta SELECT para buscar dados do banco de dados, gravarei esses dados no Excel e, finalmente, farei o download automaticamente.<\/p>\n<p><strong>index.php<\/strong><\/p>\n<pre><code>&lt;?php\nrequire_once \"vendor\/autoload.php\";\nrequire_once \"db.php\";\n\u00a0\nuse PhpOfficePhpSpreadsheetSpreadsheet;\nuse PhpOfficePhpSpreadsheetWriterXlsx;\n\u00a0\n$spreadsheet = new Spreadsheet();\n$Excel_writer = new Xlsx($spreadsheet);\n\u00a0\n$spreadsheet-&gt;setActiveSheetIndex(0);\n$activeSheet = $spreadsheet-&gt;getActiveSheet();\n\u00a0\n$activeSheet-&gt;setCellValue('A1', 'Product Name');\n$activeSheet-&gt;setCellValue('B1', 'Product SKU');\n$activeSheet-&gt;setCellValue('C1', 'Product Price');\n\u00a0\n$query = $db-&gt;query(\"SELECT * FROM products ORDER BY id DESC\");\n\u00a0\nif($query-&gt;num_rows &gt; 0) {\n\u00a0\u00a0\u00a0\u00a0$i = 2;\n\u00a0\u00a0\u00a0\u00a0while($row = $query-&gt;fetch_assoc()) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$activeSheet-&gt;setCellValue('A'.$i, $row['product_name']);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$activeSheet-&gt;setCellValue('B'.$i, $row['product_sku']);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$activeSheet-&gt;setCellValue('C'.$i, $row['product_price']);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$i++;\n\u00a0\u00a0\u00a0\u00a0}\n}\n\u00a0\n$filename = 'products.xlsx';\n\u00a0\nheader('Content-Type: application\/vnd.ms-excel');\nheader('Content-Disposition: attachment;filename='. $filename);\nheader('Cache-Control: max-age=0');\n$Excel_writer-&gt;save('php:\/\/output');<\/code><\/pre>\n<p>Quando voc\u00ea executa este arquivo PHP em um navegador, um arquivo Excel come\u00e7ar\u00e1 a ser baixado automaticamente e esta planilha Excel ter\u00e1 a seguinte sa\u00edda.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20480-6081f88658855.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-20480-6081f88658855.png\" alt=\"Como exportar dados do banco de dados MySQL para Excel usando PHP\" ><\/a><\/p>\n<h3>Exportar dados do banco de dados MySQL para CSV usando PHP<\/h3>\n<p>Na se\u00e7\u00e3o anterior, exportamos os dados para um arquivo Excel. Se algu\u00e9m deseja exportar dados em um arquivo CSV, voc\u00ea precisa alterar algumas linhas no c\u00f3digo acima.<\/p>\n<p><strong>csv.php<\/strong><\/p>\n<pre><code>&lt;?php\nrequire_once \"vendor\/autoload.php\";\nrequire_once \"db.php\";\n\u00a0\nuse PhpOfficePhpSpreadsheetSpreadsheet;\nuse PhpOfficePhpSpreadsheetWriterCsv;\n\u00a0\n$spreadsheet = new Spreadsheet();\n$Excel_writer = new Csv($spreadsheet);\n\u00a0\n$spreadsheet-&gt;setActiveSheetIndex(0);\n$activeSheet = $spreadsheet-&gt;getActiveSheet();\n\u00a0\n$activeSheet-&gt;setCellValue('A1', 'Product Name');\n$activeSheet-&gt;setCellValue('B1', 'Product SKU');\n$activeSheet-&gt;setCellValue('C1', 'Product Price');\n\u00a0\n$query = $db-&gt;query(\"SELECT * FROM products ORDER BY id DESC\");\n\u00a0\nif($query-&gt;num_rows &gt; 0) {\n\u00a0\u00a0\u00a0\u00a0$i = 2;\n\u00a0\u00a0\u00a0\u00a0while($row = $query-&gt;fetch_assoc()) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$activeSheet-&gt;setCellValue('A'.$i, $row['product_name']);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$activeSheet-&gt;setCellValue('B'.$i, $row['product_sku']);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$activeSheet-&gt;setCellValue('C'.$i, $row['product_price']);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$i++;\n\u00a0\u00a0\u00a0\u00a0}\n}\n\u00a0\n$filename = 'products.csv';\n\u00a0\nheader('Content-Type: application\/text-csv');\nheader('Content-Disposition: attachment;filename='. $filename);\nheader('Cache-Control: max-age=0');\n$Excel_writer-&gt;save('php:\/\/output');<\/code><\/pre>\n<h3>Envie um e-mail com o arquivo como anexo<\/h3>\n<p>At\u00e9 agora neste artigo, vimos como fazer o download do arquivo em formato CSV e Excel. Alguns usu\u00e1rios podem querer enviar o arquivo exportado como um anexo no e-mail. Vamos ver como conseguir isso.<\/p>\n<p>Primeiro instale a biblioteca <a href=\"https:\/\/github.com\/PHPMailer\/PHPMailer\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PHPMailer<\/a> usando o comando:<\/p>\n<pre><code>composer require phpmailer\/phpmailer<\/code><\/pre>\n<p>Depois de instalar a biblioteca, voc\u00ea pode usar qualquer servidor SMTP para enviar um e-mail. Voc\u00ea decide. Voc\u00ea pode usar o servidor SMTP fornecido pela hospedagem, AWS SES ou servidor SMTP do Gmail. Se voc\u00ea estiver usando o servidor SMTP do Gmail, leia nosso artigo <a href=\"https:\/\/themewp.inform.click\/pt-pt\/enviar-e-mail-usando-o-servidor-smtp-do-gmail-a-partir-de-script-php\/\" title=\"Enviar e-mail usando o servidor SMTP do Gmail a partir de script PHP,\">Enviar e-mail usando o servidor SMTP do Gmail a partir de script PHP,<\/a> que explica a configura\u00e7\u00e3o necess\u00e1ria para isso.<\/p>\n<p>O c\u00f3digo \u00e9 escrito anteriormente baixa o arquivo automaticamente. Mas agora, em vez de torn\u00e1-lo dispon\u00edvel para download, salvaremos o arquivo no diret\u00f3rio e o enviaremos como anexo. Resumindo, teremos abaixo o c\u00f3digo para salvar o arquivo.<\/p>\n<pre><code>...\n$filename = 'products.csv';\n\u00a0\nif (!file_exists('files')) {\n\u00a0\u00a0\u00a0\u00a0mkdir('files', 0755);\n}\n$Excel_writer-&gt;save('files\/'.$filename);<\/code><\/pre>\n<p>Nosso c\u00f3digo final para enviar anexo em um e-mail ser\u00e1 o seguinte:<\/p>\n<pre><code>&lt;?php\nrequire_once \"vendor\/autoload.php\";\nrequire_once \"db.php\";\n\u00a0\nuse PhpOfficePhpSpreadsheetSpreadsheet;\nuse PhpOfficePhpSpreadsheetWriterCsv;\n\u00a0\n\/\/Import PHPMailer classes into the global namespace\nuse PHPMailerPHPMailerPHPMailer;\nuse PHPMailerPHPMailerException;\n\u00a0\n$spreadsheet = new Spreadsheet();\n$Excel_writer = new Csv($spreadsheet);\n\u00a0\n$spreadsheet-&gt;setActiveSheetIndex(0);\n$activeSheet = $spreadsheet-&gt;getActiveSheet();\n\u00a0\n$activeSheet-&gt;setCellValue('A1', 'Product Name');\n$activeSheet-&gt;setCellValue('B1', 'Product SKU');\n$activeSheet-&gt;setCellValue('C1', 'Product Price');\n\u00a0\n$query = $db-&gt;query(\"SELECT * FROM products ORDER BY id DESC\");\n\u00a0\nif($query-&gt;num_rows &gt; 0) {\n\u00a0\u00a0\u00a0\u00a0$i = 2;\n\u00a0\u00a0\u00a0\u00a0while($row = $query-&gt;fetch_assoc()) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$activeSheet-&gt;setCellValue('A'.$i, $row['product_name']);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$activeSheet-&gt;setCellValue('B'.$i, $row['product_sku']);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$activeSheet-&gt;setCellValue('C'.$i, $row['product_price']);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$i++;\n\u00a0\u00a0\u00a0\u00a0}\n}\n\u00a0\n$filename = 'products.csv';\n\u00a0\nif (!file_exists('files')) {\n\u00a0\u00a0\u00a0\u00a0mkdir('files', 0755);\n}\n$Excel_writer-&gt;save('files\/'.$filename);\n\u00a0\n\/\/ send as an attachment\n$mail = new PHPMailer(true);\ntry {\n\u00a0\u00a0\u00a0\u00a0$mail-&gt;isSMTP();\n\u00a0\u00a0\u00a0\u00a0$mail-&gt;Host = 'SMTP_HOST';\n\u00a0\u00a0\u00a0\u00a0$mail-&gt;SMTPAuth = true;\n\u00a0\u00a0\u00a0\u00a0$mail-&gt;Username = 'SMTP_USERNAME';\u00a0\u00a0 \/\/username\n\u00a0\u00a0\u00a0\u00a0$mail-&gt;Password = 'SMTP_PASSWORD';\u00a0\u00a0 \/\/password\n\u00a0\u00a0\u00a0\u00a0$mail-&gt;SMTPSecure = 'ssl';\n\u00a0\u00a0\u00a0\u00a0$mail-&gt;Port = 465;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$mail-&gt;setFrom('FROM_EMAIL_ADDRESS', 'FROM_NAME');\n\u00a0\u00a0\u00a0\u00a0$mail-&gt;addAddress('RECEPIENT_EMAIL_ADDRESS', 'RECEPIENT_NAME');\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0$mail-&gt;addAttachment('files\/'.$filename);\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0$mail-&gt;isHTML(true);\n\u00a0\u00a0\u00a0\u00a0$mail-&gt;Subject = 'Our Exported File';\n\u00a0\u00a0\u00a0\u00a0$mail-&gt;Body\u00a0\u00a0\u00a0 = 'Our Exported File';\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0$mail-&gt;send();\n\u00a0\u00a0\u00a0\u00a0echo 'Message has been sent';\n} catch (Exception $e) {\n\u00a0\u00a0\u00a0\u00a0echo 'Message could not be sent. Mailer Error: '. $mail-&gt;ErrorInfo;\n}<\/code><\/pre>\n<p>Substitua os marcadores pelos valores reais e o email ser\u00e1 enviado com um anexo ao endere\u00e7o de email do destinat\u00e1rio.<\/p>\n<p>Espero que voc\u00ea entenda como exportar registros do banco de dados MySQL para o arquivo Excel ou CSV e tamb\u00e9m envi\u00e1-lo como um anexo. Por favor, compartilhe 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-transferir-arquivos-para-servidor-remoto-em-php\/\" title=\"Como transferir arquivos para servidor remoto em PHP\">Como transferir arquivos para servidor remoto em PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/enviar-e-mail-usando-mailjet-alternativa-ao-servidor-smtp-do-gmail-em-php\/\" title=\"Enviar e-mail usando Mailjet (alternativa ao servidor SMTP do Gmail) em PHP\">Enviar e-mail usando Mailjet (alternativa ao servidor SMTP do Gmail) em 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 deseja exportar dados do banco de dados MySQL para o Excel usando PHP? Neste artigo, mostramos como \u00e9 poss\u00edvel exportar dados facilmente para um arquivo Excel com c\u00f3digo mimumum<\/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-27806","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\/27806","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=27806"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts\/27806\/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=27806"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/categories?post=27806"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/tags?post=27806"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}