Buenas tardes comunidad,

llevo tiempo tratando de que Alba lea archivos en Excel para agregarle funcionalidad al mismo; ya que algunos profesores llevan sus notas en listados y quieren que Alba los lea directo desde sus ficheros xls o xlsx.

Así que decidí explorar como solucion para mi necesidad usar el plugin sfPhpExcelPlugin de symfony, en mi caso tengo a Alba alojado en un server linux, así que voy a la ruta donde se encuentra:

cd /var/www/html/alba
php symfony plugin:install sfPhpExcelPlugin

Una vez instalado usamos las clases del plugin para crear el lector de Excel. ( Dejo ejemplo donde uso una planilla existente como formato, escribo los datos en la planilla desde la base de datos y genero la exportación del Excel usando los headers ). El codigo es el siguiente:

public function executeExport($request){
        $division_id = $request->getParameter('division');
        $periodo_id = $request->getParameter('periodo');
        $this->aAlumno = $this->getAlumnos($division_id);

        $division = DivisionPeer::retrieveByPk($division_id);
        $anio = AnioPeer::retrieveByPk($division->getFkAnioId());
        $periodo = PeriodoPeer::retrieveByPk($periodo_id);
      

         $inputFileType = 'Excel2007';
        $inputFileName = '/var/www/html/alba/web/uploads/informes/planilla.xlsx';

        /**  Create a new Reader of the type defined in $inputFileType  **/
         $objPHPExcel = PHPExcel_IOFactory::load($inputFileName);
        $objPHPExcel->setActiveSheetIndex(0);
        $j=13;
        $objPHPExcel->getActiveSheet()->setCellValue('M7', "Periodo: ".$periodo->getDescripcion());
        $objPHPExcel->getActiveSheet()->setCellValue('D8', $anio->getDescripcion());
        $objPHPExcel->getActiveSheet()->setCellValue('F9', $division->getDescripcion());
        $objPHPExcel->getActiveSheet()->setCellValue('L8', $this->getUser()->getAttribute('usuario'));
        $objPHPExcel->getActiveSheet()->setCellValue('L9', $this->getUser()->getAttribute('usuario'));
        $x=0;
        foreach($this->aAlumno as $alumno){
            $objPHPExcel->getActiveSheet()->setCellValue('B'.$j, $x+1);
            $objPHPExcel->getActiveSheet()->setCellValue('C'.$j, $alumno->getNroDocumento());
            $objPHPExcel->getActiveSheet()->setCellValue('D'.$j, $alumno->getApellido()." ".$alumno->getApellidoMaterno()." ".$alumno->getNombre());
            $j++;
            $x++;
        }

        header('Pragma: public');
        header('Expires: 0');
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename="planilla_'.$division->getDescripcion()."_".$id_asignatura."_".$periodo->getDescripcion().'.xlsx"');
        header('Content-Transfer-Encoding: binary');

        $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel,$inputFileType);
        $objWriter->setOffice2003Compatibility(true);
        $objWriter->save('php://output');
        return sfView::NONE;
    }


Espero les sirva para sus aplicaciones, adicional tengo varios cambios que estoy tratando de documentar para hacerlos de su conocimiento.

Sin más un saludo para todos.