2012-06-06 61 views
3

如何使用PHPExcel從Excel文件讀取圖像並將圖像保存在服務器中並顯示它們?該文件的擴展名爲.xlsx。使用PHP從Excel文件(xlsx)提取圖像

我的代碼:

$objPHPExcel = PHPExcel_IOFactory::load($path); 

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(); 
    } 

} 

謝謝!

+0

到目前爲止您嘗試過什麼?你可以編輯你的問題讓我們看看你的代碼。 –

+0

我複製了我的代碼...您可以在下面看到它。 – rSara

+0

您應該編輯問題本身,添加代碼。我剛剛爲你做了,所以請刪除你發佈給我們的代碼的答案。 –

回答

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

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

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

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

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

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

編輯

Spoonfeeding時間。

這將從當前活動工作表中提取所有圖像,並將它們寫入服務器上的文件。

$objPHPExcel = PHPExcel_IOFactory::load($path); 

$i = 0; 
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(); 
     switch ($drawing->getMimeType()) { 
      case PHPExcel_Worksheet_MemoryDrawing::MIMETYPE_PNG : 
        $extension = 'png'; break; 
      case PHPExcel_Worksheet_MemoryDrawing::MIMETYPE_GIF: 
        $extension = 'gif'; break; 
      case PHPExcel_Worksheet_MemoryDrawing::MIMETYPE_JPEG : 
        $extension = 'jpg'; break; 
     } 
    } else { 
     $zipReader = fopen($drawing->getPath(),'r'); 
     $imageContents = ''; 
     while (!feof($zipReader)) { 
      $imageContents .= fread($zipReader,1024); 
     } 
     fclose($zipReader); 
     $extension = $drawing->getExtension(); 
    } 
    $myFileName = '00_Image_'.++$i.'.'.$extension; 
    file_put_contents($myFileName,$imageContents); 
} 

文件被命名爲

00_Image_n.extension 

其中n是一個數從1開始,並且延伸爲所述圖像類型相應的擴展(PNG,JPG,GIF,等等)。

+0

我已經讀過這個答案,但我不明白它... 這是我的代碼,但我不知道如何繼續,它不是爲xls exstantion $ objPHPExcel = PHPExcel_IOFactory :: load( $ PATH); ($ 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(); } } – rSara

+0

您對此有何瞭解?調用這個會給你一個圖像對象的數組。根據圖像對象的類型,您使用getImageResource()檢索原始圖像數據的字節流或getIndexedFilename()並讀取返回的文件以獲取圖像 –

+0

但它不適用於xlsx exstantion – rSara