Apache POI锁定标题行
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Apache POI锁定标题行相关的知识,希望对你有一定的参考价值。
有没有人熟悉在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工作簿 - 在版本3.8-beta3中提到了一个修复了使用XSSF电子表格冻结窗格的行为的错误修正:
50884 - XSSF和HSSF冻结窗格现在表现相同(poi-developers)
我不知道这个细节,但如果你在那条船上,那就值得调查一下。
你不能冻结中间行而不让它上面的行也冻结。
假设您有100行,标题行位于第50行。您可能希望只有第50行被锁定,这样当从第1-49行滚动时,所有内容都会向上滚动,当它到达第50行时,第50行会滚动到第50行。顶部并在滚动第51-100行时停留在那里。
但是,有一个解决方法。你可以做的是,将行分组,然后冻结它们。
首先,将行从1-49分组,然后从1-50冻结窗格。现在,用户可以最小化该组,然后使用锁定表头并位于顶部的表。
sheet.groupRow(0, 49);
sheet.createFreezePane(0, 50);
虽然有一小部分。如果工作表受到保护,MS Excel将不允许您展开/折叠组。为此,您需要编写一个宏。
以上是关于Apache POI锁定标题行的主要内容,如果未能解决你的问题,请参考以下文章
雷林鹏分享:Apache POI电子表格/Spreadsheet