5

我想使用 PHPExcel 从 Excel 工作表中删除所有以“//”开头的行。我的代码:

require '../Classes/PHPExcel.php';
require_once '../Classes/PHPExcel/IOFactory.php';

error_reporting(E_ALL & ~E_STRICT & ~E_NOTICE);


$path = "del_head.xls";

$objPHPExcel = PHPExcel_IOFactory::load($path);
$objWorksheet = $objPHPExcel->getActiveSheet();
$highestRow = $objWorksheet->getHighestRow();
$highestColumn = $objWorksheet->getHighestColumn();
$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);


for($row=1; $row < $highestRow; ++$row){
   $value = $objPHPExcel->getActiveSheet()->getCell('A'.$row)->getValue();

   if (substr($value,0,2) == "//") {
      $objPHPExcel->getActiveSheet()->removeRow($row, $row);
      }
}

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, "Excel2007");
$objWriter->save($path);

但是,代码不会删除所有以“//”开头的行。我认为问题出在函数“removeRow”上。

非常感谢您提前。

4

4 回答 4

5

替换此行

$objPHPExcel->getActiveSheet()->removeRow($row, $row);

$objPHPExcel->getActiveSheet()->removeRow($row);
于 2015-04-05T12:04:58.817 回答
3

调用 有一个明显的问题removeRow():第一个参数是起始行,第二个是要删除的行数;因此,如果您在第 5 行找到 //,那么您就是在告诉 PHPExcel 从第 5 行开始删除 5 行(即第 5 到第 9 行)。

您还在读取扩展名为 .xls 的文件(假设它是扩展名中的 BIFF 文件),但使用与 OfficeOpenXML 文件(通常是 .xlsx 文件)相同的 .xls 文件名保存。

那么您的文件实际上是什么格式?对 IOFactory 的 identify() 方法的调用将其识别为什么?如果它实际上是一个逗号或制表符分隔的值文件(很可能有一个前导//),那么您最好使用 PHPfgetcsv()fputcsv()函数来处理它以删除这些行。

于 2013-07-10T07:11:02.017 回答
1

试试这个代码,它对我有用

$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);
    }
}
于 2016-06-09T11:11:03.147 回答
0

请检查在线分配的值:

$highestRow = $objWorksheet->getHighestRow();

我已经测试了这段代码,该值始终为 1

于 2016-05-01T09:49:58.537 回答