phpexcel按顺序删除单元格上带有注释的多行

phpexcel按顺序删除单元格上带有注释的多行,php,phpexcel,Php,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

我的问题是我试图删除循环中的多行。我只想删除“好”行,不好的行留有标记。 看起来是这样的:

$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]]);

请尝试以下代码,这对我很有用:

$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;
            }
        }

请尝试以下代码,这对我很有用:

$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;
            }
        }

首先,我建议不要使用Excel网格,作为工作区,只使用Excel进行显示-将计算与表示分开,这样的顺序将使调试更容易。如果你想弄乱数据,请读取数组中的必填区域,然后使用PHP解决它。首先,我建议不要使用Excel网格,因为工作区域仅用于显示-将计算与表示分开,这样的顺序将使调试更容易。如果您想处理数据,请读取数组中的必填区域,然后使用PHP解决该区域。