2

我想一次删除一列而不删除列的右侧。我已经浏览了第一行,如果它是空白的,我只想删除该列。但该功能只允许我删除列和它旁边的列。y场景列(M有值)(N无值)(O无值)(P有值)(Q有值)

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

1 回答 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);
}
于 2012-12-12T23:19:01.800 回答