2015-02-09 2 views
0

Я попытался найти способ просто получить определенные строки, используя PHPExcel. После поиска в Интернете, я не могу понять это самостоятельно. То, что я хочу сделать, - это перечислить все строки, содержащие «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!!! 

Вот код без фильтра строк, он показывает все строки первенствовать:

<?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 ​​Rajput, до сих пор я не осознавал расстройство. Большое спасибо за уборку! – JBoY

+0

Нет проблем. друг, вот что для stackoverflow это ... :) мой ответ решил вашу проблему? –

ответ

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; 

Логика: Я просто хранить строку, чтобы темп вар и сравнили каждое значение ячейки Роу к контенту. Если он совпал, я установил $contentFound в ture и добавил строку temp в основную таблицу ($table var). В следующем цикле вертикального чтения снова $tempRow and $contentFound установится в исходное состояние, так что, наконец, требуемые строки будут в нашем выходе.

Примечание: По моим сведениям, в PHPExcel нет встроенной функции поиска.

+1

Вы правы, PHPExcel не предоставляет встроенной функции поиска –

+0

@MarkBaker: Спасибо за подтверждение ... –

+0

@AdarshRajput, еще раз спасибо, ваш код работал как шарм !! Я думал, что PHPExcel имеет собственную функцию поиска, что делает вещи неудобными. Вы знаете, есть ли встроенные функции для очистки или различения повторяющихся строк? Спасибо всем! – JBoY