Apache POI 3.7で作成されたスプレッドシートの行をロックする方法に精通している人はいますか?ロックとは、ユーザーが行をスクロールしているときに、列のタイトル行を表示したままにすることを意味します。作成したスプレッドシートには500行あり、列の名前が常に表示されていると便利です。
回答:
シート内の任意の場所で特定の行をフリーズする必要がある場合(内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
これを行うには、次のようにフリーズペインを作成できます。
workbook.getSheetAt(workbook.getActiveSheetIndex()).createFreezePane(0, 1);
これにより、最初の行が所定の位置でフリーズします。より多くのオプションを備えた別の方法があるので、APIをチェックしてください。
注意すべき唯一のことは、XSSFワークブックを使用している場合です-XSSFスプレッドシートを使用してフリーズペインの動作を修正したバージョン3.8-beta3のバグ修正についての言及があります。
50884-XSSFとHSSFのフリーズペインが同じように動作するようになりました(poi-developers)
詳細はわかりませんが、その船に乗っているかどうかを調べる価値はあります。
真ん中の行をフリーズせずに、その上の行もフリーズすることはできません。
100行あり、ヘッダー行が50行目にあるとします。行50のみがロックされるため、1〜49行目からスクロールするとすべてが上にスクロールされ、50行目に達すると50行目が上部にあり、51〜100行目をスクロールしてもそこにとどまります。
ただし、回避策があります。できることは、行をグループ化してからフリーズすることです。
まず、1〜49の行をグループ化し、次に1〜50のペインをフリーズします。これで、ユーザーはグループを最小化してから、テーブルヘッダーをロックして上部に配置してテーブルを操作できます。
sheet.groupRow(0, 49);
sheet.createFreezePane(0, 50);
ただし、小さな問題があります。シートが保護されている場合、MSExcelではグループを展開/折りたたみできません。このためには、マクロを作成する必要があります。