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

への呼び出しには明らかな問題が 1 つありますremoveRow()。最初の引数は開始行であり、2 番目の引数は削除する行数です。したがって、行 5 に // が見つかった場合、PHPExcel に行 5 から始まる 5 行 (つまり、行 5 から 9) を削除するように指示していることになります。

また、拡張子が .xls のファイル (拡張子が BIFF ファイルであると仮定) を読み込んでいますが、OfficeOpenXML ファイル (通常は .xlsx ファイル) と同じ .xls ファイル名で保存しています。

では、実際にあなたのファイルはどのような形式ですか? IOFactory の identify() メソッドへの呼び出しは、それを何として認識しますか? 実際にコンマまたはタブで区切られた値ファイル (先頭//に.fgetcsv()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 に答える