2012-03-02 1 views
7

настоящее время у меня этотнагрузки первенствует файл в PHP_Excel с переменной

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

Файл Читаю извлекается из сообщения электронной почты, так, а не писать его в TempFile Я хотел бы, чтобы прочитать его непосредственно в PHPExcel из строки (если это имеет смысл)

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

Я посмотрел на PHP первенствует руководство, но не могу понять, как это сделать, какие-то идеи?

ответ

5

PHPExcel не предоставляет прямой метод для загрузки из строки, а не из файла. В качестве альтернативы фактически создавая физический файл файловой системы для $ tmpfile, хотя, вы можете быть в состоянии использовать php://memory или php://temp

+1

Релевантная проблема, открытая в трекер-фактуре PHPExcel: https://github.com/PHPOffice/PHPExcel/issues/677 – CubicleSoft

+0

Как это сделать? 'PHPExcel_IOFactory :: load ('php: // temp')' кажется неправильным ... У вас есть идея? Будут ли проблемы с zip или так? – robsch

+0

@robsch - непонятно, что вы имеете в виду –

2

Сначала вы должны создать читатель для файла excel, а затем загрузить этот файл из созданного вами читателя. Взгляните на this для получения полной информации.

13

Это может быть не самым элегантным решением, но вот как я ее решил:

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

Это должно быть отмечено как правильный ответ, так как php: // память и временные параметры не могут быть повторно использованы после закрытия. Это решение не идеально, но его единственный способ, которым PHPexcel/phpspreadsheet принимает данные из строки – Avenyet

Смежные вопросы