BACKUP DE UNA TABLA MYSQL Y EXPORTAR .CSV .XLS EXCEL CON PHP PDO
Para realizar un backup de una tabla MySQL y exportar los datos a un archivo .XLS (Excel) utilizando PHP con PDO, sigue estos pasos:
DESCARGAR LIBRERÍA PhpSpreadsheet DE EXCEL PARA PHP
Conexión a la base de datos:
Asegúrate de tener una conexión establecida a tu base de datos MySQL utilizando PDO. Puedes hacerlo de la siguiente manera:
--------------------------------------
<?php
$servername = "nombre_del_servidor";
$username = "nombre_de_usuario";
$password = "contraseña";
$dbname = "nombre_de_la_base_de_datos";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// Configurar el modo de error para que PDO lance excepciones en caso de error
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Conexión exitosa";
} catch (PDOException $e) {
echo "Error de conexión: " . $e->getMessage();
}
?>
-------------------------------------
Realizar el backup de la tabla:
Para hacer un respaldo de la tabla, simplemente ejecutaremos una consulta SQL para obtener todos los datos de la tabla. Luego, los almacenaremos en un archivo CSV usando el formato Excel:
-------------------------------
<?php
try {
// Realizar consulta para obtener los datos de la tabla
$stmt = $conn->prepare("SELECT * FROM nombre_de_la_tabla");
$stmt->execute();
$resultados = $stmt->fetchAll(PDO::FETCH_ASSOC);
// Crear un archivo CSV temporal
$archivo_csv = fopen('respaldo_tabla.csv', 'w');
// Escribir los datos de la tabla en el archivo CSV
foreach ($resultados as $fila) {
fputcsv($archivo_csv, $fila);
}
// Cerrar el archivo
fclose($archivo_csv);
echo "Backup de la tabla realizado correctamente.";
} catch (PDOException $e) {
echo "Error: " . $e->getMessage();
}
?>
--------------------------
Exportar a Excel (.XLS):
Una vez que tienes el archivo CSV con los datos de la tabla, ahora puedes convertirlo en un archivo Excel (.XLS). Para esto, puedes usar una librería externa como PHPExcel (actualmente reemplazada por PhpSpreadsheet):
Descarga PhpSpreadsheet desde
https://github.com/PHPOffice/PhpSpreadsheet
Luego, incluye la librería en tu script PHP y realiza la conversión:
-----------------------------
<?php
require 'ruta_donde_descargaste_phpSpreadsheet/vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\IOFactory;
try {
// Cargar el archivo CSV
$reader = IOFactory::createReader('Csv');
$spreadsheet = $reader->load('respaldo_tabla.csv');
// Crear un archivo Excel
$writer = IOFactory::createWriter($spreadsheet, 'Xls');
$writer->save('respaldo_tabla.xls');
echo "Exportación a Excel completada exitosamente.";
} catch (Exception $e) {
echo "Error: " . $e->getMessage();
}
?>
Con esto, deberías tener un archivo respaldo_tabla.xls en tu directorio que contiene los datos de la tabla en formato Excel.
Es importante tener en cuenta que las librerías externas como PhpSpreadsheet deben ser descargadas e incluidas correctamente en tu proyecto para que el código funcione. Asegúrate de obtener la versión más actualizada de la librería y seguir las instrucciones de instalación según la documentación oficial.
///////////////////////////////////////////
https://www.baulphp.com/generar-excel-con-phpspreadsheet-y-php-mysql/
Generar excel con PhpSpreadsheet: Ejemplos
A continuación, veremos ejemplos sobre el uso de esta gran librería.
A) Crear documentos y guardar en el disco
Crearemos un documento Excel, le pondremos algunas propiedades del archivo y veremos las cosas básicas.
<?php
// Declaramos la libreria
require __DIR__ . "/vendor/autoload.php";
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
$spread = new Spreadsheet();
$spread
->getProperties()
->setCreator("BaulPHP")
->setLastModifiedBy('Nestor Tapia')
->setTitle('Excel creado con PhpSpreadSheet')
->setSubject('Excel Demostración')
->setDescription('Excel generado como prueba')
->setKeywords('PHPSpreadsheet')
->setCategory('Categoría de prueba');
$writer = new Xlsx($spread);
# Creamos el archivo y lo guardamos en el disco
$writer->save('./doc_exportados/reporte_2022_01_01.xlsx');
?>
B) Crear y descargar documento creado
Este script crea el documento y ejecuta la descarga directamente sin necesidad de guardarlo en disco del servidor.
<?php
// Declaramos la librería
require __DIR__ . "/vendor/autoload.php";
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
$spread = new Spreadsheet();
$spread
->getProperties()
->setCreator("Nestor Tapia")
->setLastModifiedBy('BaulPHP')
->setTitle('Excel creado con PhpSpreadSheet')
->setSubject('Excel de prueba')
->setDescription('Excel generado como demostración')
->setKeywords('PHPSpreadsheet')
->setCategory('Categoría Excel');
$fileName="Descarga_excel.xlsx";
# Crear un "escritor"
$writer = new Xlsx($spread);
# Le pasamos la ruta de guardado
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment; filename="'. urlencode($fileName).'"');
$writer->save('php://output');
?>
C) Agregar contenido al archivo Excel
Cada documento Excel puede tener muchas hojas dentro. Y cada hoja tiene celdas que tienen una posición para poder identificarla (A1, B2, B3, …).
<?php
// Declaramos la librería
require __DIR__ . "/vendor/autoload.php";
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
$spread = new Spreadsheet();
$sheet = $spread->getActiveSheet();
$sheet->setTitle("Hoja 1");
$sheet->setCellValueByColumnAndRow(1, 1, "Valor A1");
$sheet->setCellValue("B1", "Valor celda B2");
$sheet->setCellValue("B2", "Valor celda B2");
$sheet->setCellValue("B3", "Valor celda B3");
$writer = new Xlsx($spread);
$writer->save('./doc_exportados/reporte_de_excel.xlsx');
?>
D) Crear documento desde MySQL
En ejemplos anteriores hemos apreciado la creación de documentos de Excel, tanto en guardar en disco y descargar el archivo.
<?php
require_once "vendor/autoload.php";
# Nuestra base de datos
require_once "db_conect.php";
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
# Obtener base de datos
$con = ConexionBD();
$documento = new Spreadsheet();
$documento
->getProperties()
->setCreator("Nestor Tapia")
->setLastModifiedBy('BaulPHP')
->setTitle('Archivo generado desde MySQL')
->setDescription('Productos y proveedores exportados desde MySQL');
$hojaDeProductos = $documento->getActiveSheet();
$hojaDeProductos->setTitle("Productos");
# Encabezado de los productos
$encabezado = ["Codigo", "Producto", "Precio de compra", "Precio de venta", "Existencia"];
# El último argumento es por defecto A1
$hojaDeProductos->fromArray($encabezado, null, 'A1');
$consulta = "select * from tbl_productos";
$sentencia = $con->prepare($consulta, [
PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL,
]);
$sentencia->execute();
# Comenzamos en la fila 2
$numeroDeFila = 2;
while ($producto = $sentencia->fetchObject()) {
# Obtener registros de MySQL
$codigo = $producto->codigo;
$productos = $producto->producto;
$precio_compra = $producto->precio_compra;
$precio_venta = $producto->precio_venta;
$existencia = $producto->existencia;
# Escribir registros en el documento
$hojaDeProductos->setCellValueByColumnAndRow(1, $numeroDeFila, $codigo);
$hojaDeProductos->setCellValueByColumnAndRow(2, $numeroDeFila, $productos);
$hojaDeProductos->setCellValueByColumnAndRow(3, $numeroDeFila, $precio_compra);
$hojaDeProductos->setCellValueByColumnAndRow(4, $numeroDeFila, $precio_venta);
$hojaDeProductos->setCellValueByColumnAndRow(5, $numeroDeFila, $existencia);
$numeroDeFila++;
}
# Ahora creamos la hoja "proveedores"
$hojaDeProveedores = $documento->createSheet();
$hojaDeProveedores->setTitle("Proveedores");
# Declaramos el encabezado
$encabezado = ["Nombres", "Dirección Email ", "Empresa", "Pais residencia"];
$hojaDeProveedores->fromArray($encabezado, null, 'A1');
# Obtener los proveedores de MySQL
$consulta = "select * from tbl_proveedores";
$sentencia = $con->prepare($consulta, [
PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL,
]);
$sentencia->execute();
# Comenzamos en la 2
$numeroDeFila = 2;
while ($proveedores = $sentencia->fetchObject()) {
# Obtener los datos de la base de datos
$nombres = $proveedores->nombres;
$correo = $proveedores->correo;
$empresa = $proveedores->empresa;
$pais = $proveedores->pais;
# Escribir en el documento
$hojaDeProveedores->setCellValueByColumnAndRow(1, $numeroDeFila, $nombres);
$hojaDeProveedores->setCellValueByColumnAndRow(2, $numeroDeFila, $correo);
$hojaDeProveedores->setCellValueByColumnAndRow(3, $numeroDeFila, $empresa);
$hojaDeProveedores->setCellValueByColumnAndRow(4, $numeroDeFila, $pais);
$numeroDeFila++;
}
# Crear un "escritor"
$writer = new Xlsx($documento);
# Le pasamos la ruta de guardado
$writer->save('./doc_exportados/Exportado_productos_proveedores.xlsx');
?>
Comentarios
Publicar un comentario