2015-02-09 95 views
0

我試圖找到一種方法,只得到使用PHPExcel特定行perticular值的所有行。在互聯網上搜索後,我無法自己弄清楚。我想要做的是列出所有具有「I1/027」作爲列內容的行。PHPExcel搜索/返回包含在細胞

例如:

Hours | Place | Name 
------|-------|----------------- 
3  |I1/027 | example1 //------> Want to add it to my list!!! 
6  |I2/025 | example2 //------> Ignore this 
7  |I1/030 | example3 
2  |I1/027 | example4 //------> Want to add it to my list!!! 

這裏是沒有行過濾器的代碼,它顯示了所有的Excel行:

<?php if(isset($_FILES['file']['name'])) { ?> 
    <!-- Container progress bar --> 
    <div id="progress" style="width:500px;border:1px solid #ccc;"></div> 
    <!-- progress info --> 
    <div id="information" style="width"></div> 

    <?php require_once 'reader/Classes/PHPExcel/IOFactory.php'; 
     //Extra functions 
     function get_cell($cell, $objPHPExcel){ 
      //Cell selection 
      $objCell = ($objPHPExcel->getActiveSheet()->getCell($cell)); 
      //taking cell value 
      return $objCell->getvalue(); 
     } 
     function pp(&$var){ 
      $var = chr(ord($var)+1); 
      return true; 
     } 
    //==========Displaying Code 
     $name  = $_FILES['file']['name']; 
     $tname = $_FILES['file']['tmp_name']; 
     $type  = $_FILES['file']['type']; 

     if($type == 'application/vnd.ms-excel') 
     { // excel 97 extension 
      $ext = 'xls'; 
     } 
     else if($type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') 
     { // excel 2007 and 2010 extensions 
      $ext = 'xlsx'; 
     }else 
     { // invalid extension 
      echo -1; 
      exit(); 
     } 
     $xlsx = 'Excel2007'; 
     $xls = 'Excel5'; 

     //read creator 
     $objReader = PHPExcel_IOFactory::createReader($$ext); 
     //loading 
     $objPHPExcel = $objReader->load($tname); 

     $dim = $objPHPExcel->getActiveSheet()->calculateWorksheetDimension(); 
     // put $start and $end array 
     list($start, $end) = explode(':', $dim); 

     if(!preg_match('#([A-Z]+)([0-9]+)#', $start, $rslt)){ 
      return false; 
     } 
     list($start, $start_h, $start_v) = $rslt; 
     if(!preg_match('#([A-Z]+)([0-9]+)#', $end, $rslt)){ 
      return false; 
     } 
     list($end, $end_h, $end_v) = $rslt; 

     //starting to read excel doc 
     $table = "<table class='tabla'>"; 
     for($v=$start_v; $v<=$end_v; $v++){  
      // calculate progress bar 
      $percent = intval($v/$end_v * 100)."%"; 
      // progress bar update 
      echo '<script language="javascript"> 
      document.getElementById("progress").innerHTML="<div style=\"width:'.$percent.';background-color:#ddd;\">&nbsp;'.$percent.'</div>"; 
      document.getElementById("information").innerHTML="'.$v.' files processades.";</script>'; 

      // buffer flush 
      echo str_repeat(' ',1024*64); 
      // send exit to navigator 
      flush(); 
      sleep(0.25); 

      //horizontal reading 
      $table .= "<tr>"; 
      for($h=$start_h; ord($h)<=ord($end_h); pp($h)){ 
       $cellValue = get_cell($h.$v, $objPHPExcel); 
       $table .= "<td>"; 
       if($cellValue !== null){ 
        $table .= $cellValue; 
       } 
       $table .= "</td>"; 
      } 
      $table .= "</tr>"; 
     } 
     $table .= "</table>"; 

     // process completed 
     echo '<script language="javascript">document.getElementById("information").innerHTML="Procés complet"</script><br>'; 
     echo $table; 
    }?> 
</div> 

非常感謝事先!

+0

對不起,我醜表@Adarsh拉其普特人,我不知道這種疾病至今。非常感謝清理! – JBoY 2015-02-09 13:16:35

+0

沒有問題。朋友,這就是爲什麼對於stackoverflow是... :)我的答案是否解決了你的問題? – 2015-02-09 14:17:51

回答

1

解決方案:在這裏,你只需要使用簡單的邏輯。像更改您的以下水平的閱讀代碼:

//horizontal reading 
$tempRow= "<tr>"; 
$contentFound=false; 

for($h=$start_h; ord($h)<=ord($end_h); pp($h)){ 
    $cellValue = get_cell($h.$v, $objPHPExcel); 
    $tempRow.= "<td>"; 
    if($cellValue !== null){ 
     if($cellValue=="I1/027") $contentFound=true; 
     $tempRow.= $cellValue; 
    } 
    $tempRow.= "</td>"; 
    } 
    $tempRow.= "</tr>"; 

if($contentFound) $table.=$tempRow; 

邏輯:我只是存儲在行中,以溫度var和比較行的每個單元格的值所需的內容。如果匹配,則我將$contentFound設置爲ture,並將臨時行添加到主表($table var)。在下一個垂直讀數循環中,$tempRow and $contentFound將設置爲原始狀態,因此最終所需的行將在我們的輸出中。

注:據我所知,PHPExcel沒有內置的搜索功能。

+1

你是正確的,PHPExcel不提供任何內置的搜索功能 – 2015-02-09 12:39:41

+0

@MarkBaker:感謝確認... – 2015-02-09 14:18:44

+0

@AdarshRajput,再次感謝你,你的代碼工作就像一個魅力!我認爲PHPExcel有它自己的搜索功能,這讓事情變得尷尬。你知道是否有內置的函數來清理或區分重複的行嗎? 非常感謝大家! – JBoY 2015-02-10 10:30:10