En PHP tenemos una clase que nos da utilidades para trabajar con hojas de cálculo, PHPExcel. Ya habíamos hablado antes sobre cómo trabajar con PHP y archivos CSV, pero con esta librería podemos trabajar directamente con archivos de hoja de cálculo. Nos permite generar documentos xls, xlsx, ods, pdf… formatear las celdas, aplicar fórmulas, validar datos… e importar hojas de cálculo.
Si descargáis el proyecto desde GitHub os econtraréis con un montón de ejemplos sobre cómo llevar a cabo distintas acciones, aquí vamos a recoger sólo uno, el más básico de creación de un archivo, traduciendo al castellano los comentarios:
error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); date_default_timezone_set('Europe/London'); define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '<br />'); /** Cargamos la librería PHPExcel */ require_once '../Build/PHPExcel.phar'; // Creamos un objeto PHPExcel echo date('H:i:s') , " Create new PHPExcel object" , EOL; $objPHPExcel = new PHPExcel(); // Definimos las propiedades del documento echo date('H:i:s') , " Set document properties" , EOL; $objPHPExcel->getProperties()->setCreator("Creador") ->setLastModifiedBy("Creador") ->setTitle("PHPExcel Test Document") ->setSubject("PHPExcel Test Document") ->setDescription("Documento de Excel creado por clases PHP.") ->setKeywords("office PHPExcel php") ->setCategory("Resultado de la prueba"); // Añadimos datos echo date('H:i:s') , " Add some data" , EOL; $objPHPExcel->setActiveSheetIndex(0) ->setCellValue('A1', 'Hello') ->setCellValue('B2', 'world!') ->setCellValue('C1', 'Hello') ->setCellValue('D2', 'world!'); // Comprobamos que la codificación UTF-8 vaya bien $objPHPExcel->setActiveSheetIndex(0) ->setCellValue('A4', 'Miscellaneous glyphs') ->setCellValue('A5', 'éàèùâêîôûëïüÿäöüç'); // Renombrar la hoja de trabajo echo date('H:i:s') , " Rename worksheet" , EOL; $objPHPExcel->getActiveSheet()->setTitle('Simple'); // Definimos la hoja de cálculo activa $objPHPExcel->setActiveSheetIndex(0); // Escribimos el resultado en una hoja de Excel 2007 (xlsx) echo date('H:i:s') , " Write to Excel2007 format" , EOL; $callStartTime = microtime(true); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); $objWriter->save(str_replace('.php', '.xlsx', __FILE__)); $callEndTime = microtime(true); $callTime = $callEndTime - $callStartTime; echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL; echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL; // Ahora salvamos los datos en Excel clásico echo date('H:i:s') , " Write to Excel5 format" , EOL; $callStartTime = microtime(true); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save(str_replace('.php', '.xls', __FILE__)); $callEndTime = microtime(true); $callTime = $callEndTime - $callStartTime; echo date('H:i:s') , " File written to " , str_replace('.php', '.xls', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL; echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL; // Imprimimos en pantalla que se ha finalizado el trabajo. echo date('H:i:s') , " Done writing files" , EOL; echo 'Files have been created in ' , getcwd() , EOL;
Como ya he dicho antes, la documentación incluye un montón de ejemplos, casi 40, así que podréis sacar de ahí mucha ayuda. Con esta librería podrás complacer a los clientes que exigen sacar los resultados de las consultas directamente a hojas de cálculo, por ejemplo.
amigo un ejemplo para importar archivos xlsx o csv seria de gran ayuda