2011-05-24 44 views
6

我有一個電子表格,我想使用PHP導入。我可以使用PHPExcel導入單元格數據,但無法弄清楚如何使用電子表格中的圖像。使用PHP在Excel文件(xls)中提取圖片/圖像

有沒有辦法做到這一點,然後使用PHP中的圖像保存到服務器等?

非常感謝您的幫助! :)


更新:

@馬克 - 貝克 - 非常感謝你對這個您的幫助!

我用下面的代碼與一個JPG測試XLS文件:

$objPHPExcel = PHPExcel_IOFactory::load("SH.xls"); 

foreach ($objPHPExcel->getActiveSheet()->getDrawingCollection() as $drawing) { 
    if ($drawing instanceof PHPExcel_Worksheet_MemoryDrawing) { 
     ob_start(); 
     call_user_func(
      $drawing->getRenderingFunction(), 
      $drawing->getImageResource() 
     ); 
     $imageContents = ob_get_contents(); 
     ob_end_clean(); 
    } 
} 

我想我可以再輸出JPEG頭和$imageContents內容來顯示圖像。

如何在電子表格中獲得圖像的實際名稱,例如「Picture1」?這可能與PHPExcel_Worksheet_MemoryDrawing?

我不能夠感謝你!

回答

3

一個人,我不知道這是否是你自己,也問過類似的問題在PHPExcel板...,我沒有得到一輪又回答。

$objPHPExcel->getActiveSheet()->getDrawingCollection() 

將返回活動工作表中所有圖像對象的ArrayObject。

這些對象將是PHPExcel_Worksheet_Drawing或PHPExcel_Worksheet_MemoryDrawing對象:您可以使用is_a()來識別哪些對象。然後,您可以使用適合該類的方法(如API中所述)從文件(用於PHPExcel_Worksheet_Drawing對象)或直接從PHPExcel_Worksheet_MemoryDrawing對象本身讀取圖像數據。 getName()和getDescription()方法可用於從圖像對象檢索相關值。

注意,它也可以與打印頭相關聯的圖像對象:

$objPHPExcel->getActiveSheet()->getHeaderFooter()->getImages() 

可以用來檢索頁眉/頁腳圖像。這是一個PHPExcel_Worksheet_HeaderFooterDrawing對象的數組。所有的PHPExcel_Worksheet_Drawing方法都可以用來從這些對象中提取圖像文件。

編輯

基於在修改問題代碼:

$drawing->getName(); 

應該給你你需要什麼

+0

非常感謝你抽出時間來回答我 - 我真的很感激它!我已經更新了我的問題 - 你願意爲我看看嗎? – SammyBlackBaron 2011-05-31 09:08:57

+0

我試過'$ drawing-> getName();'但它不返回任何內容,只是空白。 'getName()'只用於'PHPExcel_Worksheet_Drawing'對象而不是'PHPExcel_Worksheet_MemoryDrawing'對象嗎? – SammyBlackBaron 2011-05-31 10:29:50

+0

如果您正在從Excel 2007文件中讀取圖像,則應該設置名稱,但如果從Excel BIFF文件讀取圖像,則不會設置名稱......我不知道它是否可以在內部讀取沒有檢查規格的BIFF。 – 2011-05-31 10:52:06

0

你可以做到以下幾點:

$im = {excel data} <br> 
header("Content-type: image/jpeg"); // or whatever <Br> 
$image = imagejpeg($im, NULL, 100);