【问题标题】:Delete rows with PHPExcel使用 PHPExcel 删除行
【发布时间】:2018-11-16 20:01:11
【问题描述】:

我想使用 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”。

非常感谢您。

【问题讨论】:

    标签: phpexcel


    【解决方案1】:

    替换这一行

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 我的 Excel 表是这样的://SDN_parameter_mapping //SDN:LOCAL:Depth //SDN:LOCAL:WC_Temp //SDN:LOCAL:WC_Sal //SDN:LOCAL:WC_SIGT //SDN:LOCAL:WC_O2 //SDN:LOCAL:WC_O2(% ) //SDN:LOCAL:WC_PO4 //SDN:LOCAL:WC_SiO4 //SDN:LOCAL:WC_NO2 //SDN:LOCAL:WC_NO3 //SDN:LOCAL:WC_NH4 //SDN:LOCAL:Chl_a // 所以,我想删除前 14 行.
      • 这根本不是 Excel 格式:我不确定它是什么;但你最好只使用 fopen(),然后 fgets() 依次读取每一行
      • 使用以下代码可以正常工作:$objPHPExcel->getActiveSheet()->removeRow(1,8); $objPHPExcel->getActiveSheet()->removeRow(1,6);
      • 嗨,当我使用 removeRow 时,它对我有用,但最后添加了空行,就像我从第 21 - 30 行添加 10 行一样,它会删除,但是当我转换为 pdf 时,它会给我 PDF底部多出 10 行
      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        请检查在线分配的值:

        $highestRow = $objWorksheet->getHighestRow();
        

        我已经测试过这段代码,值始终是 1

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-02-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-03-10
          相关资源
          最近更新 更多