2012-12-12 76 views
2

我想一次刪除一列,而不刪除列的右側。我已經經歷了第一行,如果它的空白,我只想刪除列。但該功能只允許我刪除列和旁邊的列。 ÿ之情況列(M具有值)(N沒有值)(O沒有值)(P具有值)(Q具有值)Phpexcel刪除一列或多列

$toremove_arr=array(); 
for ($ga='A'; $ga !== $highestCol; $ga++){ 
    $col=$objPHPExcel->getActiveSheet()->getCell($ga.'1')->getValue(); 
    if ($col=='') { 
     $toremove_arr[]=$ga; 
    } 
} 
$toremove_num = count($toremove_arr); 
for($i=0; $i < $toremove_num; $i++){ 
    $objPHPExcel->getActiveSheet()->removeColumn($toremove_arr[$i], 1); 
} 

回答

6

當刪除一列,如列A,PHPExcel並不是簡單地清空A列中的所有單元格,而是將所有其他列填充空位......所以B列成爲新列A,C列成爲新列B等等。這模擬了MS Excel的行爲。

如果要刪除的列的數組包含A和B,則首先刪除列A.前一列B現在變成列A,前一列C變成列B,前一列D變成新列C.然後刪除列B ......但實際上的數據是以前在列中的數據C ...不是您計劃刪除的列...您真的打算從現在列A列中刪除數據。

要解決此問題,您需要刪除列中的數據相反的順序;所以你首先刪除B列,然後A列。

array_reverse($toremove_arr); 
$toremove_num = count($toremove_arr); 
for($i=0; $i < $toremove_num; $i++){ 
    $objPHPExcel->getActiveSheet()->removeColumn($toremove_arr[$i], 1); 
} 
+0

會試一試。 – Mervyn