2016-05-19 13 views
1

持つすべての余分なExcelの列:隠すこれが私の目的であるのApache POI-

excel screenshot with extra columns hidden

私は、Apache POIを使用してのxlsxファイルを生成しています。使用している列の右側にある未使用の列をすべて非表示にしたいと考えています。 Excelでは、これは比較的簡単な操作です。無関係な列をすべて選択して、すべてを1つのアクションで非表示にすることができます。 Apache POIでは、唯一のオプションはsheet.setColumnHidden(index, true)です。私はすべての余分な列のためにこれを実行しようとした場合:

for (int i = myLastColumn+1; i < 16384; ++i) { 
    sheet.setColumnHidden(i, true); 
} 

、ライブラリは非現実的である、それを隠すために千16以上の列を作成しようとします:それは、それが行くように遅いと遅くなると、終了したことがありません。 setColumnRangeHiddenなどのようには見えません。

Apache POIのほぼすべての列を非表示にする方法はありますか?

答えて

3

最終的に、どのようにXSSFSheetColumnHelperの仕組みを見て、私は欠けていた機能のビットを見つけることができました。

単一の列を表示して非表示にすると、ColumnHelperは、(存在しない場合は)要求したインデックスの新しい列を作成し、非表示に設定します。ただし、列オブジェクトは実際にCTColで、minmaxフィールドは同じインデックスに設定されています。異なるminフィールドとmaxフィールドを持つCTColオブジェクトを作成すると、1つのアクションですべての一致する列の状態を設定できます。したがって

CTCol col = sheet.getCTWorksheet().getColsArray(0).addNewCol(); 
col.setMin(myLastColumn+2); 
col.setMax(16384); // the last column (1-indexed) 
col.setHidden(true);