ApachePOIロックヘッダー行


84

Apache POI 3.7で作成されたスプレッドシートの行をロックする方法に精通している人はいますか?ロックとは、ユーザーが行をスクロールしているときに、列のタイトル行を表示したままにすることを意味します。作成したスプレッドシートには500行あり、列の名前が常に表示されていると便利です。


2
POI 3.7は少し古くなっていますが、最新バージョンを使用していない理由はありますか?
gagravarr 2013

2
はい、私の雇用主が許可したものです。

回答:


130

シート内の任意の場所で特定の行をフリーズする必要がある場合(内org.apache.poi.ss.usermodel.Sheet)(POI 3.7でも使用可能)

Sheet.createFreezePane(int colSplit, int rowSplit, int leftmostColumn, int topRow)

あなたの場合、最初のx行だけをフリーズしたい場合は、int leftmostColumn, int topRowセクションが削除され、

Sheet.createFreezePane(int colSplit, int rowSplit)

例えば

sheet1.createFreezePane(0, 5); // this will freeze first five rows

最初の列と行番号#17のみをフリーズしたいので、これを実現する方法を教えてください。前もって感謝します。
Ashish Burnwal 2017

17

これを行うには、次のようにフリーズペインを作成できます。

workbook.getSheetAt(workbook.getActiveSheetIndex()).createFreezePane(0, 1);

これにより、最初の行が所定の位置でフリーズします。より多くのオプションを備えた別の方法があるので、APIをチェックしてください。

注意すべき唯一のことは、XSSFワークブックを使用している場合です-XSSFスプレッドシートを使用してフリーズペインの動作を修正したバージョン3.8-beta3のバグ修正についての言及があります。

50884-XSSFとHSSFのフリーズペインが同じように動作するようになりました(poi-developers)

詳細はわかりませんが、その船に乗っているかどうかを調べる価値はあります。


1

真ん中の行をフリーズせずに、その上の行もフリーズすることはできません。

100行あり、ヘッダー行が50行目にあるとします。行50のみがロックされるため、1〜49行目からスクロールするとすべてが上にスクロールされ、50行目に達すると50行目が上部にあり、51〜100行目をスクロールしてもそこにとどまります。

ただし、回避策があります。できることは、行をグループ化してからフリーズすることです。

まず、1〜49の行をグループ化し、次に1〜50のペインをフリーズします。これで、ユーザーはグループを最小化してから、テーブルヘッダーをロックして上部に配置してテーブルを操作できます。

sheet.groupRow(0, 49);
sheet.createFreezePane(0, 50);

ただし、小さな問題があります。シートが保護されている場合、MSExcelではグループを展開/折りたたみできません。このためには、マクロを作成する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.