2016-06-21 44 views
0

私のExcelファイルを解析するためにPHPExcelを使用しています。そして、私のファイルは各行に画像を持っています。私は "getDrawingCollection"関数を使って、Excelファイル内のすべての画像を取得しています。それは全体的にうまく動作します。しかし、一部の画像はgetDrawingCollection関数で認識されません。私は自分のコードで何かを変更する必要がありますか?phpexcel getDrawingCollection - 一部の画像が認識されない

$objReader = PHPExcel_IOFactory::createReader('Excel2007'); 
$objPHPExcel = $objReader->load($uploadfile); 

$objWorksheet = $objPHPExcel->getActiveSheet(); 

    foreach ($objWorksheet->getDrawingCollection() as $drawing) { 
     $string = $drawing->getCoordinates(); 
     $coordinate = PHPExcel_Cell::coordinateFromString($string); 


     if ($drawing instanceof PHPExcel_Worksheet_Drawing) { 
          //copy image 
     } 
    } 

答えて

0
if ($drawing instanceof PHPExcel_Worksheet_Drawing) { 

あなたが代わりに

if ($drawing instanceof PHPExcel_Worksheet_BaseDrawing) { 

を使用する場合があります "メモリ図面"

をピックアップしません。以下のようなもの:

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(); 
     $extension = 'png'; 
    } 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); 
} 
+0

しかし、私の問題は、ある - 私のエクセルシートにいくつかの画像を認識していない "$ objPHPExcel-> GetActiveSheet関数()> getDrawingCollection()" 関数自体。例:ワークシートに3枚の画像があります。しかし、このforeachループは1回だけ実行されます。他の2枚の画像は認識されません。画像に問題はありますか? – viji

+0

その後、私は実際のファイルを見ずに手がかりを持っていません。チャートを除いて、それは独自のコレクションを持っています。どのような種類の画像がdrawingCollectionに追加されていないのか分かりません。 –

+0

http://jmp.sh/ISqbA8Eこのサンプルは画像付きのExcelファイルです。ここで最初の2つの画像は認識されません。 – viji

関連する問題