2011-01-20 19 views
7

Come integrare lo PHPExcel nella mia app Zend.Integrazione PHPExcel in Zend Framework

mia struttura di cartelle attuale è la seguente:

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

ho già contenere la 'mia' libs utilizzando (in index.php):

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

Ora voglio anche utilizzare PHPExcel all'interno uno dei miei controller come:

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

Cosa devo fare per farlo funzionare e sbarazzarsi di e Class 'PHPExcel_IOFactory' not found Eccezione?

Grazie.
-lony

P.S .: Un semplice $autoloader->registerNamespace('PHPExcel_'); non funziona. L'ho provato

risposta

9

Posizionare la libreria PHPExcel nella cartella/biblioteca, in questo modo:

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

successiva, nel file di configurazione Application.ini, aggiungere il seguente:

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

Che dovrebbe farlo. Il caricatore automatico si prende cura di tutto il resto e puoi semplicemente iniziare a utilizzare il codice di esempio per leggere un file Excel.

Aggiornamento: Aggiunta l'autoloaderNamespace extra come suggerito da commentatori

+0

Come descritto nella mia domanda, ho provato a usare '$ autoloader-> registerNamespace ('PHPExcel _');' e non funzionava. La tua soluzione sposta solo l'impostazione da 'index.php' a' application.ini', ma non è ancora in esecuzione. – lony

+0

Avete la stessa impostazione nella cartella/libreria? Il file PHPExcel.php di base è sotto/library, e il resto delle classi è in/library/PHPExcel. L'ho implementato solo ieri, senza problemi – Miljar

+0

L'unico problema con questo è che rende l'aggiunta di PHPExcel come svn: esterno o difficile (separato esterno per PHPExcel.php), o impossibile. –

0

ho trovato una soluzione:

require_once 'PHPExcel/PHPExcel/IOFactory.php';

Se qualcuno ha uno migliore, si prega di tenere distacco!

@BoltClock: Grazie per aver aggiornato i tag.

+1

Bene, dal frammento che hai postato sopra il tuo problema è abbastanza ovvio, sposta tutto il sorgente PHPExcel un livello in alto, quindi IOFactory.php si trova nella libreria/PHPExcel/IOFactory.php invece che in libreria/PHPExcel/PHPExcel/IOFactory .php. Questo dovrebbe fare il trucco (e puoi abbandonare require_once). – wimvds

0

ha bisogno di essere nel vostro percorso di inclusione.

Se è necessario un caricatore automatico per altre librerie che non seguono PSR-0, è disponibile anche questo: Autoload PhpThumb with Zend Framework (dichiarazione di non responsabilità: sono l'autore).

+0

Hm, sembra davvero la soluzione che volevo. Ci provo. Grazie. – lony

0

So che sono 2 anni da quando viene posta la domanda, ma può aiutare qualcuno; il modo più semplice (non ottimale) è quello di estrarre la cartella PHPExcel nel tuo pubblico e quindi utilizzare solo la vecchia maniera ex; (nelle vostre azioni del controller):

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

       $myobject = new PHPExcel(); 
0

Inoltre ho aggiunto una "\" sulla linea in cui PHPExcel_IOFactory utilizza in classe Controller:

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

Ho lo stesso problema e ho risolto aggiornare il compositore e nella cartella del mio progetto phpoffice salvato all'interno del modulo del venditore (non in lib). E aggiungendo "\" su PHPExcel_IOFactory ovunque tu abbia visto.