2014-06-20 1 views
3

그래서 Excel 파일을 가져 오지만 행을 가져 와서 데이터베이스에 추가합니다.PHPExcel - 행을 반복합니다. 이미지가 이미지 파일 인 경우

이제는 행의 마지막 열에 이미지가 있는지 찾아야합니다.

모든 행에 이미지가있는 것은 아니며 필수 사항은 아닙니다.

내가 Retrieving image in PHPExcel

여기에 언급 된 솔루션을 사용하여 시도했다 그러나 그 모든 이미지를 가져옵니다. 모든 행에 이미지가있는 것이 아니라면 좋지 않습니다. 나는 어떤 이미지가 어떤 행에 속해 있는지 알지 못한다.

도움이 될 것입니다.

+2

MarkBarker는 링크 내에서 언급하지만 이미지는 셀이 아닌 셀에 오버레이됩니다. 특히 한 행에서 시작하고 다른 행에서 불규칙하게 끝날 수 있습니다. 그는 또한 다른 질문에 대한 답을 더 잘 여기에 연관시킵니다 : [* PHPexcel : Image extraction *] (http://stackoverflow.com/questions/18185639/phpexcel-image-extraction) 링크 된 대답은 좌표를 얻을 수 있다고 말합니다 * '$ drawing-> getCoordinates();'* 이미지의 필터링에 도움이된다면 – MackieeE

+0

이것을 지적 해 주셔서 감사합니다. 내가 참조를 교차시키기 위해 그것을 사용할 수 있는지 알게 될 것이고, 그 다음에 세포를 기반으로 이미지를 붙잡을 것이다. 예! –

+0

굉장! :) 당신이 그것을 해결할 수 있었다면, 몇 가지 예제 코드로 자신의 질문에 대답하고 미래의 사람들을위한 수용으로 표시하십시오! – MackieeE

답변

3

다음 스크립트를 사용하여이 작업을 수행 할 수있었습니다.

if ($_FILES['file_source']['tmp_name']) { 

     // Get our import file extension 
     ${'Extension'} = strtolower(array_pop(explode('.', $_FILES['file_source']['name']))); 

     // Store our content array 
     ${'Accounts'} = array(); 

     if (${'Extension'} == 'xls' || ${'Extension'} == 'xlsx') { 

      // Create a new Excel instance 
      if (${'Extension'} == 'xlsx') { 
       $objReader = PHPExcel_IOFactory::createReader('Excel2007'); 
      } else { 
       $objReader = PHPExcel_IOFactory::createReader('Excel5'); 
      } 
      $objReader->setReadDataOnly(false); 
      $objPHPExcel = $objReader->load($_FILES['file_source']['tmp_name']); 
      $objWorksheet = $objPHPExcel->getActiveSheet(); 

      // Check for the columns and column titles 
      if($objPHPExcel->getActiveSheet()->getCellByColumnAndRow(0, 1)->getValue() != 'Post Title' || $objPHPExcel->getActiveSheet()->getCellByColumnAndRow(1, 1)->getValue() != 'Content' || $objPHPExcel->getActiveSheet()->getCellByColumnAndRow(2, 1)->getValue() != 'Link' || $objPHPExcel->getActiveSheet()->getCellByColumnAndRow(3, 1)->getValue() != 'Link Title' || $objPHPExcel->getActiveSheet()->getCellByColumnAndRow(4, 1)->getValue() != 'Link Description' || $objPHPExcel->getActiveSheet()->getCellByColumnAndRow(5, 1)->getValue() != 'Image'){ 
       echo json_encode(array('response'=>'fail', 'reason'=>'column_error')); 
       exit; 
      } 

      // Get the total number of rows in the spreadsheet 
      $rows = $objWorksheet->getHighestRow(); 

      // Check that each row contains all the required data 
      $row_errors = 0; 
      $row = 1; 
      // skip the first row if it has our column names 
      for (((($objPHPExcel->getActiveSheet()->getCellByColumnAndRow(0, $row)->getValue()) == 'Post Title') ? $row = 2 : $row = 1); $row <= $rows; ++$row) { 

       // Sanitize all our & add them to the accounts array 
       if($objPHPExcel->getActiveSheet()->getCellByColumnAndRow(0, $row)->getValue() == '') { $row_errors++; } 
       if($objPHPExcel->getActiveSheet()->getCellByColumnAndRow(1, $row)->getValue() == '') { $row_errors++; } 

      } 

      if($row_errors>0){ 
       echo json_encode(array('response'=>'fail', 'reason'=>'required_data')); 
       exit; 
      } 

      // Loop through all the rows (line items) 
      $row = 1; 
      ${'Iterator'} = 0; 
      // skip the first row if it has our column names 
      for (((($objPHPExcel->getActiveSheet()->getCellByColumnAndRow(0, $row)->getValue()) == 'Post Title') ? $row = 2 : $row = 1); $row <= $rows; ++$row) { 

       // Sanitize all our & add them to the accounts array 
       ${'Accounts'}[${'Iterator'}] = array('Post Title'  => inputCleanSQL($objPHPExcel->getActiveSheet()->getCellByColumnAndRow(0, $row)->getValue()), 
                'Content'   => inputCleanSQL($objPHPExcel->getActiveSheet()->getCellByColumnAndRow(1, $row)->getValue()), 
                'Link'    => inputCleanSQL($objPHPExcel->getActiveSheet()->getCellByColumnAndRow(2, $row)->getValue()), 
                'Link Title'  => inputCleanSQL($objPHPExcel->getActiveSheet()->getCellByColumnAndRow(3, $row)->getValue()), 
                'Link Description' => inputCleanSQL($objPHPExcel->getActiveSheet()->getCellByColumnAndRow(4, $row)->getValue()) 
              ); 

       // Check if there is a corresponding image with this row 
       foreach ($objPHPExcel->getActiveSheet()->getDrawingCollection() as $drawing) { 
        if ($drawing instanceof PHPExcel_Worksheet_MemoryDrawing) { 
         $cellID = $drawing->getCoordinates(); 
         if($cellID == PHPExcel_Cell::stringFromColumnIndex(5).$row){ 
          ob_start(); 
          call_user_func(
           $drawing->getRenderingFunction(), 
           $drawing->getImageResource() 
          ); 
          $imageContents = ob_get_contents(); 
          ob_end_clean(); 

          $filetype = $drawing->getMimeType(); 
          $filename = md5(microtime());     

          switch ($filetype) { 

           case 'image/gif': 
            $image = imagecreatefromstring($imageContents); 
            imagegif($image, "/var/www/social/uploads/i/$filename.gif", 100); 
            $new_file = "$filename.gif"; 
            break; 

           case 'image/jpeg': 
            $image = imagecreatefromstring($imageContents); 
            imagejpeg($image, "/var/www/social/uploads/i/$filename.jpeg", 100); 
            $new_file = "$filename.jpeg"; 
            break; 

           case 'image/png': 
            $image = imagecreatefromstring($imageContents); 
            imagepng($image, "/var/www/social/uploads/i/$filename.png", 100); 
            $new_file = "$filename.png"; 
            break; 

           default: 
            continue 2; 

          } 

          // Add our image location to the array 
          ${'Accounts'}[${'Iterator'}]['image'] = array('link'=>'http://IMAGECDN/'.$new_file, 'type'=>$filetype, 'name'=>$new_file, 'size'=>filesize('/'.$new_file)); 

         } 

        } 

       } 
       // increase our interator 
       ${'Iterator'}++; 
      } 

     // if not proper file type throw an error 
     } else { 
      echo json_encode(array('response'=>'fail', 'reason'=>'invalid_type')); 
      exit; 
     } 
} 
관련 문제