2012-03-02 21 views
7

Al momento ho questaCarica file excel in PHP_Excel da variabile

file_put_contents($tmpfile, $attachments[0]['body']); 
$objPHPExcel = PHPExcel_IOFactory::load($tmpfile); 

Il file che sto leggendo è estratto da una e-mail, in modo piuttosto che scriverlo in un file temporaneo vorrei leggerla direttamente in phpexcel da una stringa (se questo ha un senso)

$objPHPExcel = PHPExcel_IOFactory::load($attachments[0]['body']); 

ho guardato il php Excel manuale, ma non si può vedere come farlo, tutte le idee?

risposta

5

PHPExcel non fornisce alcun metodo diretto per il caricamento da una stringa anziché da un file. Come alternativa alla creazione in realtà un file system fisico per $ tmpfile però, si potrebbe essere in grado di utilizzare php://memory o php://temp

+1

Rilevante problema aperto nel tracker dei problemi PHPExcel: https://github.com/PHPOffice/PHPExcel/issues/677 – CubicleSoft

+0

Come può essere fatto? 'PHPExcel_IOFactory :: load ('php: // temp')' sembra essere sbagliato ... Hai qualche idea? Ci saranno problemi con zip o così? – robsch

+0

@robsch - non chiaro cosa intendi –

2

È necessario prima creare un lettore per il file excel e quindi caricare il file dal lettore costruito. Date un'occhiata a this per tutti i dettagli.

13

questo potrebbe non essere la soluzione più elegante, ma ecco come ho risolto:

public function fromString($data=null) 
{ 
    $file = tempnam(sys_get_temp_dir(), 'excel_'); 
    $handle = fopen($file, "w"); 
    fwrite($handle, $data); 
    $return = \PHPExcel_IOFactory::load($file); 
    fclose($handle); 
    unlink($file); 
    return $return; 
} 
+0

Questo dovrebbe essere contrassegnato come la risposta corretta dal php: // memoria e temp non possono essere riutilizzati una volta chiusi. Questa soluzione non è l'ideale, ma è l'unico modo in cui PHPexcel/phpspreadsheet accetta i dati da una stringa – Avenyet