2012-03-02 12 views
7

Actualmente tengo esteCargar archivo de Excel en PHP_Excel partir de una variable

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

El archivo que estoy leyendo se extrae de un correo electrónico, por lo que en lugar de escribirlos en un archivo temporal me gustaría leerlo directamente en PHPExcel de una cadena (si eso tiene sentido)

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

he mirado en el php excel manual, pero no se puede ver cómo hacerlo, alguna idea?

Respuesta

5

PHPExcel no proporciona un método directo para cargar desde una cadena en lugar de desde un archivo. Como alternativa a la realidad la creación de un archivo de sistema de archivos físicos de $ tmpfile sin embargo, es posible que pueda utilizar php://memory o php://temp

+1

Problema relevante abierto en el rastreador de problemas de PHPExcel: https://github.com/PHPOffice/PHPExcel/issues/677 – CubicleSoft

+0

¿Cómo se puede hacer? 'PHPExcel_IOFactory :: load ('php: // temp')' parece estar equivocado ... ¿Tiene alguna idea? ¿Habrá algún problema con zip o así? – robsch

+0

@robsch - no está claro a qué se refiere –

2

Primero debe crear un lector para el archivo Excel y luego cargar ese archivo desde su lector construido. Eche un vistazo a this para más detalles.

13

esto podría no ser la solución más elegante pero aquí es cómo lo resolví:

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

Esto debe marcarse como la respuesta correcta ya que php: // memoria y temperatura no se pueden reutilizar una vez que se cierra. Esta solución no es ideal, pero es la única forma en que PHPexcel/phpspreadsheet acepta datos de una cadena – Avenyet

Cuestiones relacionadas