{"id":28387,"date":"2021-05-25T11:42:00","date_gmt":"2021-05-25T08:42:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=28387"},"modified":"2021-10-17T16:46:03","modified_gmt":"2021-10-17T13:46:03","slug":"como-exportar-datos-de-bases-de-datos-mysql-a-excel-usando-php","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/es\/como-exportar-datos-de-bases-de-datos-mysql-a-excel-usando-php\/","title":{"rendered":"C\u00f3mo exportar datos de bases de datos MySQL a Excel usando PHP"},"content":{"rendered":"<p>Recientemente publiqu\u00e9 un art\u00edculo <a href=\"https:\/\/themewp.inform.click\/es\/como-leer-archivos-csv-y-excel-en-php-usando-phpspreadsheet\/\" title=\"C\u00f3mo leer archivos CSV y Excel en PHP usando PhpSpreadsheet\" >C\u00f3mo leer archivos CSV y Excel en PHP usando PhpSpreadsheet<\/a> y uno de los lectores pregunt\u00f3 sobre la exportaci\u00f3n de registros de bases de datos MySQL a un archivo Excel. El usuario puede necesitar sus datos en el archivo Excel o CSV para poder leerlos o compartirlos f\u00e1cilmente. En este art\u00edculo, discutimos c\u00f3mo se pueden exportar datos de una base de datos a archivos Excel y CSV. Adem\u00e1s de esto, tambi\u00e9n estudiaremos c\u00f3mo se puede enviar este archivo exportado como un archivo adjunto en el correo electr\u00f3nico.<\/p>\n<h3>Empezando<\/h3>\n<p>Para comenzar, primero debe instalar la biblioteca <a href=\"https:\/\/phpspreadsheet.readthedocs.io\/en\/latest\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PhpSpreadsheet<\/a>. Recomiendo usar <a href=\"https:\/\/getcomposer.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Composer<\/a> para la instalaci\u00f3n de la biblioteca. 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>PhpSpreadsheet es la biblioteca que 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-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=\"C\u00f3mo exportar datos de bases de datos MySQL a Excel usando PHP\" ><\/a><\/p>\n<p>Nuestro objetivo final es exportar los registros de la tabla de la base de datos a un archivo Excel \/ CSV. Tomo la tabla de &#8216;productos&#8217; como ejemplo. Creemos una tabla de &#8216;productos&#8217; en la base de datos ejecutando la siguiente consulta.<\/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>A continuaci\u00f3n, agregue algunas entradas ficticias en la tabla para que vea algunos registros en el archivo 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>Luego de esto creamos un <code>db.php<\/code>archivo donde escribir\u00edamos la conexi\u00f3n a la base de datos.<\/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>Aseg\u00farese de reemplazar los marcadores de posici\u00f3n con los valores reales en el c\u00f3digo anterior. En la siguiente parte del tutorial, estoy asignando una secci\u00f3n separada sobre la exportaci\u00f3n de datos a Excel, a CSV y el env\u00edo del correo electr\u00f3nico con un archivo exportado como archivo adjunto.<\/p>\n<h3>Exportar datos de base de datos MySQL a Excel usando PHP<\/h3>\n<p>Ha instalado la biblioteca y est\u00e1 listo con una tabla de base de datos con entradas ficticias. Ahora puede continuar y escribir el c\u00f3digo real que exportar\u00e1 un archivo de Excel con los datos completados.<\/p>\n<p>Cree un <code>index.php<\/code>archivo en el directorio ra\u00edz. En este archivo, escribir\u00e9 una consulta SELECT para obtener datos de la base de datos, escribir\u00e9 estos datos en Excel y, finalmente, har\u00e9 que se descarguen autom\u00e1ticamente.<\/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>Cuando ejecuta este archivo PHP en un navegador, un archivo de Excel comenzar\u00e1 a descargarse autom\u00e1ticamente y esta hoja de Excel tendr\u00e1 el siguiente resultado.<\/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=\"C\u00f3mo exportar datos de bases de datos MySQL a Excel usando PHP\" ><\/a><\/p>\n<h3>Exportar datos de base de datos MySQL a CSV usando PHP<\/h3>\n<p>En la secci\u00f3n anterior, exportamos datos a un archivo de Excel. Si alguien est\u00e1 buscando exportar datos en un archivo CSV, debe cambiar algunas l\u00edneas en el c\u00f3digo anterior.<\/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>Env\u00ede un correo electr\u00f3nico con un archivo adjunto<\/h3>\n<p>Hasta ahora en este art\u00edculo, hemos visto c\u00f3mo descargar el archivo en formato CSV y Excel. Es posible que algunos usuarios deseen enviar el archivo exportado como archivo adjunto en el correo electr\u00f3nico. Veamos c\u00f3mo lograrlo.<\/p>\n<p>Primero instale la biblioteca <a href=\"https:\/\/github.com\/PHPMailer\/PHPMailer\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PHPMailer<\/a> usando el comando:<\/p>\n<pre><code>composer require phpmailer\/phpmailer<\/code><\/pre>\n<p>Despu\u00e9s de instalar la biblioteca, puede usar cualquier servidor SMTP para enviar un correo electr\u00f3nico. Tu decides. Puede utilizar el servidor SMTP proporcionado por el alojamiento, AWS SES o el servidor SMTP de Gmail. Si va con el servidor SMTP de Gmail, lea nuestro art\u00edculo <a href=\"https:\/\/themewp.inform.click\/es\/enviar-correo-electronico-usando-el-servidor-smtp-de-gmail-desde-php-script\/\" title=\"Enviar correo electr\u00f3nico utilizando el servidor SMTP de Gmail desde PHP Script,\">Enviar correo electr\u00f3nico utilizando el servidor SMTP de Gmail desde PHP Script,<\/a> que explica la configuraci\u00f3n necesaria para ello.<\/p>\n<p>El c\u00f3digo que se escribe previamente descarga el archivo autom\u00e1ticamente. Pero ahora, en lugar de hacerlo descargable, guardaremos el archivo en el directorio y luego lo enviaremos como un archivo adjunto. En resumen, tendremos un c\u00f3digo a continuaci\u00f3n para guardar el archivo.<\/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>Nuestro c\u00f3digo final para enviar un archivo adjunto en un correo electr\u00f3nico ser\u00e1 el siguiente:<\/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>Reemplace los marcadores de posici\u00f3n con los valores reales y el correo electr\u00f3nico se enviar\u00e1 con un archivo adjunto a la direcci\u00f3n de correo electr\u00f3nico del destinatario.<\/p>\n<p>Espero que comprenda c\u00f3mo exportar registros de bases de datos MySQL al archivo Excel o CSV y tambi\u00e9n enviarlo como un archivo adjunto. Comparta 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-transferir-archivos-a-un-servidor-remoto-en-php\/\" title=\"C\u00f3mo transferir archivos a un servidor remoto en PHP\">C\u00f3mo transferir archivos a un servidor remoto en PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/es\/enviar-correo-electronico-usando-mailjet-alternativa-al-servidor-smtp-de-gmail-en-php\/\" title=\"Enviar correo electr\u00f3nico usando Mailjet (alternativa al servidor SMTP de Gmail) en PHP\">Enviar correo electr\u00f3nico usando Mailjet (alternativa al servidor SMTP de Gmail) en PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/es\/como-convertir-html-a-pdf-en-php\/\" title=\"C\u00f3mo convertir HTML a PDF en PHP\">C\u00f3mo convertir HTML a PDF en PHP<\/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>\u00bfQuiere exportar los datos de la base de datos MySQL a Excel usando PHP? En este art\u00edculo, le mostramos c\u00f3mo se pueden exportar datos f\u00e1cilmente a un archivo de Excel con 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":[271],"tags":[849],"class_list":["post-28387","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\/28387","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=28387"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/posts\/28387\/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=28387"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/categories?post=28387"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/tags?post=28387"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}