Удалить строки с помощью PHPExcel
Я хочу удалить все строки, которые начинаются с "//", из листа Excel, с помощью PHPExcel. Мой код:
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 ответа
Замени эту строку
$objPHPExcel->getActiveSheet()->removeRow($row, $row);
с
$objPHPExcel->getActiveSheet()->removeRow($row);
Есть одна очевидная проблема с вашим звонком removeRow()
: Первый аргумент - начальная строка, второй - количество удаляемых строк; так что если вы найдете // в строке 5, то вы говорите PHPExcel удалить 5 строк, начиная с строки 5 (то есть строк с 5 по 9).
Вы также читаете файл с расширением.xls (при условии, что это файл BIFF с расширением), но сохраняете файл с тем же именем.xls, что и файл OfficeOpenXML (который обычно является файлом.xlsx).
Так какой формат на самом деле ваш файл? Что распознает вызов метода IOFactory identifier ()? Если на самом деле это файл значений, разделенных запятыми или табуляцией //
), тогда вам лучше использовать PHP fgetcsv()
а также fputcsv()
функции для его обработки, чтобы удалить эти строки.
Попробуйте этот код, это сработало у меня
$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);
}
}
Пожалуйста, проверьте значение, указанное в строке:
$highestRow = $objWorksheet->getHighestRow();
Я проверил этот код, и значение всегда 1