2

列の右側を削除せずに、列を1つずつ削除したいと思います。最初の行を確認しましたが、空白の場合は列のみを削除します。ただし、この関数では、列とその隣の列のみを削除できます。yscenerio列(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 に答える