我想用 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);
Run Code Online (Sandbox Code Playgroud)
但是,代码不会删除所有以“//”开头的行。我认为问题出在函数“removeRow”上。
非常感谢您提前。
小智 5
替换这一行
$objPHPExcel->getActiveSheet()->removeRow($row, $row);
Run Code Online (Sandbox Code Playgroud)
和
$objPHPExcel->getActiveSheet()->removeRow($row);
Run Code Online (Sandbox Code Playgroud)
您的调用有一个明显的问题removeRow():第一个参数是起始行,第二个参数是要删除的行数;因此,如果您在第 5 行找到 //,那么您就是在告诉 PHPExcel 删除从第 5 行开始的 5 行(即第 5 行到第 9 行)。
您还将读取扩展名为 .xls 的文件(假设它是扩展名的 BIFF 文件),但使用与 OfficeOpenXML 文件(通常是 .xlsx 文件)相同的 .xls 文件名进行保存。
那么您的文件实际上是什么格式?调用 IOFactory 的 recognize() 方法会将其识别为什么?如果它实际上是一个逗号或制表符分隔值文件(很可能有一个前导//),那么您最好使用 PHPfgetcsv()和fputcsv()函数来处理它以删除这些行。