2011-01-20 40 views
7

cómo puedo integrar el PHPExcel en mi aplicación Zend.Integración PHPExcel en Zend Framework

Mi estructura de la carpeta actual es la siguiente:

/application 
    controllers 
    views 
    etc... 
/library 
    My 
    Zend 
    PHPExcel 
/public 
    index.php 

ya incluyo 'Mis' libs utilizando (en index.php):

require_once 'Zend/Loader/Autoloader.php'; 
$autoloader = Zend_Loader_Autoloader::getInstance(); 
$autoloader->registerNamespace('My_'); 

Ahora también quieren usar dentro PHPExcel uno de mis controladores como:

$exc = PHPExcel_IOFactory::load('test.xls'); 
$excelWorksheet = $exc->getActiveSheet(); 

¿Qué tengo que hacer para que funcione y deshacerse de th e Class 'PHPExcel_IOFactory' not found ¿Excepción?

Gracias.
-lony

P.S .: Un simple $autoloader->registerNamespace('PHPExcel_'); no funciona. Lo probé

Respuesta

9

Coloque la biblioteca PHPExcel en la carpeta/biblioteca, así:

/application 
... 
/library 
    /PHPExcel 
    /PHPExcel.php 

A continuación, en el archivo de configuración application.ini, añada lo siguiente:

autoloaderNamespaces[] = "PHPExcel_" 
autoloaderNamespaces[] = "PHPExcel" 

Eso debería hacerlo. El autocargador se ocupa del resto y puede comenzar a usar el código de ejemplo para leer un archivo de Excel.

actualización: Añadido el autoloaderNamespace adicional según lo sugerido por los comentaristas

+0

Como se describe en mi pregunta intenté usar '$ autoloader-> registerNamespace ('PHPExcel _');' y no funcionaba. Su solución solo mueve la configuración de 'index.php' a' application.ini', pero aún no se está ejecutando. – lony

+0

¿Tiene la misma configuración en su carpeta/library? El archivo base PHPExcel.php está justo debajo de/library, y luego el resto de las clases se encuentra en/library/PHPExcel. Implementé esto ayer, sin ningún problema – Miljar

+0

El único problema con esto es que hace que agregar PHPExcel como un svn: externo sea difícil (separado externo para PHPExcel.php) o imposible. –

0

He encontrado una solución:

require_once 'PHPExcel/PHPExcel/IOFactory.php';

Si alguien tiene una mejor, por favor, seguir posteando!

@BoltClock: Gracias por actualizar las etiquetas.

+1

Bueno, desde el fragmento que publicó anteriormente su problema es bastante obvio, mueva todo el código fuente de PHPExcel un nivel arriba, por lo que IOFactory.php se encuentra en la biblioteca/PHPExcel/IOFactory.php en lugar de la biblioteca/PHPExcel/PHPExcel/IOFactory .php. Eso debería ser el truco (y puedes abandonar el require_once). – wimvds

0

que tiene que estar en su ruta de inclusión.

Si alguna vez necesita un autocargador personalizado para otras bibliotecas que no sigan PSR-0, hay esto también: Autoload PhpThumb with Zend Framework (descargo de responsabilidad: soy el autor).

+0

Hm, se ve realmente como la solución que quería. Lo pruebo Gracias. – lony

0

Sé que hace 2 años que se formula la pregunta, pero puede ayudar a alguien; la manera más fácil (no la óptima) es extraer la carpeta PHPExcel en su Public y luego simplemente usar la antigua manera ex; (en sus acciones del controlador):

   include 'PHPExcel.php'; 
       include 'PHPExcel/Writer/Excel2007.php'; 

       $myobject = new PHPExcel(); 
0

Además he añadido un "\" en la línea donde PHPExcel_IOFactory utiliza en clase controlador:

public function reporteauditoriaAction() 
{ 
    $objPHPExcel = new \PHPExcel(); 
    $objPHPExcel->createSheet(); 
    $objPHPExcel->getActiveSheet()->setCellValue('A1', 'Alejin Wbn'); 
    $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, "Excel2007"); 
    $objWriter->save("pruebaPhpExcelZend.xlsx"); 
    //$objPHPExcel->disconnectWorksheets(); 
    //unset($objPHPExcel); 
    $consulta= "Reporte Auditoria, Reconocio los Archivos"; 
    $vista = new ViewModel(array("consulta"=>$consulta)); 
    return $vista;   
} 
0

Tengo mismo problema y lo resolví actualizar el compositor y en mi carpeta de proyecto phpoffice guardada dentro del módulo de proveedor (no en lib). Y agregando "\" en PHPExcel_IOFactory donde sea que haya visto.