2011-08-30 98 views
2

我的問題是我嘗試刪除循環中的多行。我想只刪除'好'行並留下帶有標記的壞行。 它看起來像這樣:phpexcel按照單元格的註釋依次刪除多行

$this->writeCellErrorData($objPHPExcel);//write coments a to cell and set bg to red 
//get unique rows array 
foreach($this->celConstraintViolation as $columnNum=>$row){ 
      foreach($row as $rowNum=>$data){ 
       if(!in_array($rowNum, $this->errorRowsArr)){ 
        $this->errorRowsArr[]=$rowNum; 
       } 
      } 
     } 
     sort($this->errorRowsArr); 
     $this->errorRowsArr= array_reverse($this->errorRowsArr); 
     for($i=$this->celArrRowNum; $i>1; $i--){     //reverse loop 
      if(!in_array($i, $this->errorRowsArr)){ 
       $objPHPExcel->getActiveSheet()->removeRow($i,1); //remove rows 
      } 
     } 

之後,我保存該文件。雖然bg顏色應該是它的位置,但評論似乎是在刪除之前的位置。有沒有辦法刪除行,使註釋移動他們應該在哪裏?
添加註釋我用這條線:

$objPHPExcel->getActiveSheet()-> 
getComment(array_search($columnNum, $this->header).$rowNum)->getText()-> 
createTextRun($this->cellErrorMessages[$data[0]]); 
+0

起初,我建議不要使用Excel電網工作,因爲工作區域,使用Excel僅用於顯示 - 從表示中分離計算,這樣的順序將使調試更容易。如果你想搞亂數據,讀取數組中的所需區域,然後用PHP解決它。 – Deele

回答

0

試試這個代碼,它的工作我:

$filename = 'path/example.xls'; 
    $objReader = PHPExcel_IOFactory::createReader('Excel2007'); 
    $objPHPExcel = $objReader->load($filename); 
    $objWorksheet = $objPHPExcel->getActiveSheet(); 


    $row_id = 1; // deleted row id 
    $number_rows = 2; // number of rows count 
if ($objWorksheet != NULL) { 
      if ($objWorksheet->removeRow($row_id, $number_rows)) { 
       $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 
       $objWriter->save($filename; 
      } 
     }