2013-07-10 128 views
1

我想要使用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'上。

非常感謝您提前。

回答

2

您撥打removeRow()時有一個明顯的問題:第一個參數是起始行,第二個參數是要移除的行數;所以如果你在第5行找到//,那麼你告訴PHPExcel從第5行開始刪除5行(即第5行到第9行)。

您還正在讀取擴展名爲.xls的文件(假設它是來自擴展名的BIFF文件),但使用與OfficeOpenXML文件(通常爲.xlsx文件)相同的.xls文件名進行保存。

那麼你的文件實際上是什麼格式?對IOFactory的identify()方法的調用將它識別爲什麼?如果它實際上是以逗號或製表符分隔的值文件(最有可能具有領先的//),那麼您最好使用PHP的fgetcsv()fputcsv()函數來處理它以刪除這些行。

+0

我的Excel工作表是這樣的:// SDN_parameter_mapping \t \t \t // SDN:LOCAL:深度 \t \t \t // SDN:LOCAL:WC_Temp \t \t \t // SDN:LOCAL:WC_Sal \t \t \t // SDN:LOCAL:WC_SIGT \t \t \t // SDN:LOCAL:WC_O2 \t \t \t // SDN:LOCAL:WC_O2 (%) \t \t \t // SDN:LOCAL:WC_PO4 \t \t \t // SDN:LOCAL:WC_SiO4 \t \t \t // SDN:LOCAL:WC_NO2 \t \t \t // SDN:LOCAL:WC_NO3 \t \t \t // SDN:LOCAL:WC_NH4 \t \t \t // SDN:LOCAL:Chl_a \t \t \t // \t \t \t 所以,我想刪除第14行。 – tuxman

+0

這完全不是Excel格式:我不完全確定它是什麼;但你最好使用fopen(),然後fgets()依次讀取每一行 –

+0

使用此代碼可以很好地工作:$ objPHPExcel-> getActiveSheet() - > removeRow(1,8); $ objPHPExcel-> getActiveSheet() - > removeRow(1,6); – tuxman

0

替換此線

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

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

請,檢查分配上行中的值:

$ highestRow = $ objWorksheet-> getHighestRow();

我測試過這個代碼和值始終爲1

0

試試這個代碼,它的工作我

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