Nueva pregunta

Pregunta:

Fecha: 22-01-2015 06:51:07 (En Español)

Exportar un formulario desde PHP a Excel[Resuelta]

Buenas tardes programadores, necesito una pequena asesoria para crear una función que me exporte un formulario desde PHP a Excel o una extension cualquiera, he leido que para Excel solo sirve hasta la version 97 y tengo que hacerlo con una extension PDF Etiquetas: Excel - Formulario - Librería - PDF - PHP - PHPExcel - Pregunta Votos: 3 - Respuestas: 9 - Vistas: 51 Compartir en: Google Facebook Twitter LinkedIn Link
 

Respuestas:

  • Fecha: 22-01-2015 15:38:23 Te recomiendo utilizar la librería PHPExcel, con la cual podrás leer, escribir y crear documentos de Excel en PHP (no son CSV, son realmente archivos excel)

    Link del proyecto:
    http://phpexcel.codeplex.com/

    Link de descarga directa (última versión a la fecha 1.8.0):
    http://phpexcel.codeplex.com/downloads/get/809023

    Lo interesante de esta librería es que esta licenciada con "GNU Library General Public License (LGPL)", que es una licencia de software creada por la Free Software Foundation que pretende garantizar la libertad de compartir y modificar el software cubierto por ella, asegurando que el software es libre para todos sus usuarios.
    Acá te adjunto el link a la licencia para que verifiques la compatibilidad con tu proyecto: http://phpexcel.codeplex.com/license (siempre hay que revisar este tipo de cosas antes de trabajar con aplicaciones/componentes de terceros).

    Te dejo un ejemplo completo, si lo ejecutas te va a crear dos excel, uno en formato Excel 2007 (*.xlsx) y otro en formato Excel 97 (*.xls), así tenes los dos ejemplos, con esta info:

    Marca           Modelo                       Precio Lista
    Suzuki          Suzuki Swift 1.3 GL          14290
    Chevrolet       Chevrolet Cruze 1.8 AT       22740
    Mazda           Mazda 3MT 1.6 4x2 GS STD     20990
    


    Pasos:

    1) Descargas la librería "PHPExcel_1.8.0_doc.zip", la descompactas y te llevas la carpeta "/Classes", todo lo que esta por fuera de esta carpeta lo podes borrar.

    2) Pones el siguiente código en un archivo PHP (revisa que la ruta del require_once sea correcta)
    //agrego algunas líneas para mostrar todos los errores (ya que esto es una prueba y quiero ver si algo falla)
    error_reporting(E_ALL);
    ini_set('display_errors', TRUE);
    ini_set('display_startup_errors', TRUE);
    
    //incluyo la librería PHPExcel (ojo con el path)
    require_once 'Classes/PHPExcel.php';
    
    //creo el objeto:
    $objPHPExcel = new PHPExcel();
    
    //configuro las propiedades del documento
    $objPHPExcel->getProperties()->setCreator("Fernando Mosquera")
            ->setLastModifiedBy("Fernando Mosquera")
            ->setTitle("Prueba Excel PHPCentral")
            ->setSubject("Prueba Excel PHPCentral")
            ->setDescription("Este es un documento de prueba excel para testear la librería PHPExcel.");
    
    //Agrego la cabecera
    $objPHPExcel->setActiveSheetIndex(0)
            ->setCellValue('A1', 'Marca')
            ->setCellValue('B1', 'Modelo')
            ->setCellValue('C1', 'Precio Lista');
    
    //Invento un array con info (podría venir de una base de datos):
    $autos = array();
    $autos[] = array('marca'=>'Suzuki', 'modelo'=>'Suzuki Swift 1.3 GL', 'precio'=>14290.00);
    $autos[] = array('marca'=>'Chevrolet', 'modelo'=>'Chevrolet Cruze 1.8 AT', 'precio'=>22740.00);
    $autos[] = array('marca'=>'Mazda', 'modelo'=>'Mazda 3MT 1.6 4x2 GS STD', 'precio'=>20990.00);
    
    //Agrego información al excel en base al array inventado:
    foreach ($autos as $nroRegistro => $auto){
        $objPHPExcel->setActiveSheetIndex(0)
            ->setCellValue('A'.($nroRegistro+2), $auto['marca'])
            ->setCellValue('B'.($nroRegistro+2), $auto['modelo'])
            ->setCellValue('C'.($nroRegistro+2), $auto['precio']);
    }
    
    //Nombro la hoja del excel:
    $objPHPExcel->getActiveSheet()->setTitle('Precios de autos');
    
    //Seteo que la hoja 0 sea la primera hoja que se muestre al abrir el documento (podrías haber más de una hoja y hacer que se muestre otra hoja en vez de la primera)
    $objPHPExcel->setActiveSheetIndex(0);
    
    // Guardo el documento en formato Excel 2007 (*.xlsx)
    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
    $objWriter->save('archivo_excel_2007.xlsx');
    
    // Guardo el documento en formato Excel 97 (*.xls)
    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
    $objWriter->save('archivo_excel_97.xls');
    


    3) Lo ejecutas desde el navegado

    4) Te genera en disco los archivos "archivo_excel_2007.xlsx" y "archivo_excel_97.xls"

    5) Si te gusto el ejemplo me podes regalar alguno de los autos del excel, vos elegís ;)

    Espero que te sea de ayuda, saludos y buen código!

    PD: con respecto a lo que comentas "he leido que para excel solo sirve hasta la version 97 y tengo que hacerlo con una extension PDF", te cuento que si creas el archivo en la versión Excel 97 (*.xls), este podrá ser leido por todas las versiones de Microsoft Excel, además de LibreOffice, OpenOffice entre otros ofimaticos (el formato xls esta ampliamente extendido y soportado).
      Votos: 5 - Link respuesta
     
  • Fecha: 23-01-2015 05:25:59 muchas gracias colega por su aporte.   Votos: 0 - Link respuesta
     
  • Fecha: 26-01-2015 01:09:31 Colega, sino es mucha molestia o pedir, me podrias pasar un ejemplo que sea dinamico, que se llene mediante una base de datos, mediante un resultado de un select.   Votos: 0 - Link respuesta
     
  • Fecha: 26-01-2015 01:33:40 Elias Cibrian, el ejemplo es dinámico en cuanto a los datos que se cargan en el excel (no así con las cabeceras). Lo único que debe hacer es cargar el array "$autos" desde un select a una base de datos, y si quiere que las cabeceras sean dinámicas podría tomar el primer registro de ese select y en base a las "key" armar las cabeceras (eso se realiza desde la linea 20 a la 23 del script ejemplo).
    Saludos,
      Votos: 2 - Link respuesta
     
  • Fecha: 26-01-2015 02:24:13 jajajajajajaja....me has ayudado bastante, soy de venezuela y como haria para enviarte un auto de lo que estan en la lista???   Votos: 0 - Link respuesta
     
  • Fecha: 26-01-2015 04:56:53 Amigo sabe que ya localmente me funciona, pero subi la carpeta al servidor y los archivos y cuando lo ejecuto me sale este error.

    Fatal error: Uncaught exception 'PHPExcel_Writer_Exception' with message 'Could not close zip file Solicitudes de Reporte.xlsx.' in C:\Domains\bmss-la.com\wwwroot\Classes_Excel\PHPExcel\Writer\Excel2007.php:399 Stack trace: #0 C:\Domains\bmss-la.com\wwwroot\exportar_Excel.php(60): PHPExcel_Writer_Excel2007->save('Solicitudes de ...') #1 {main} thrown in C:\Domains\bmss-la.com\wwwroot\Classes_Excel\PHPExcel\Writer\Excel2007.php on line 399

    Esto tiene que ver algo con el alojamiento del hosting con los privilegios???
      Votos: 0 - Link respuesta
     
  • Fecha: 29-01-2015 03:46:29 Generalmente el error "Fatal error: Uncaught exception 'PHPExcel_Writer_Exception' with message 'Could not close zip..." esta asociado a alguna de las siguiente razones:

    * El directorio no existe: el directorio en el que se esta intentando guardar el archivo no existe.
    * Problema de permisos: el archivo y/o directorio no tiene permisos de escritura.
    * Problema de bloqueo: el archivo ya está abierto por otra aplicación, o tiene un bloqueo.
    * Problema de espacio: el disco en el que se esta intentando guardar el archivo esta lleno.

    Verifica estos casos.

    Saludos y buen código!
      Votos: 2 - Link respuesta
     
  • Fecha: 25-01-2016 17:09:23 Excelente información, muchas gracias Fernando +1   Votos: 1 - Link respuesta
     
  •  
      0  
     
    Fecha: 29-08-2020 04:44:24 Hola produzco el excel con php, funciona perfecto pero alguien sabe como puedo hacer para bloquear una columna para que no se pueda modificar.   Votos: 0 - Link respuesta
     
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
 
frjcbbae garagebible.com