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 개발자).
자세한 내용은 모르지만 그 배에 있다면 조사해볼 가치가 있습니다.
그 위에있는 행도 고정되지 않으면 가운데 행을 고정 할 수 없습니다.
100 개의 행이 있고 머리글 행이 50 행에 있다고 가정합니다. 행 1-49에서 스크롤 할 때 모든 항목이 위로 스크롤되고 50 행에 도달하면 50 번째 행이 51-100 행이 스크롤 될 때 상단에 유지됩니다.
그러나 해결 방법이 있습니다. 할 수있는 일은 행을 그룹화 한 다음 고정하는 것입니다.
먼저 1 ~ 49 개의 행을 그룹화 한 다음 1 ~ 50 개의 창을 고정합니다. 이제 사용자는 그룹을 최소화 한 다음 테이블 머리글을 잠그고 맨 위에있는 테이블로 작업 할 수 있습니다.
sheet.groupRow(0, 49);
sheet.createFreezePane(0, 50);
그래도 작은 문제가 있습니다. 시트가 보호 된 경우 MS Excel에서는 그룹을 확장 / 축소 할 수 없습니다. 이를 위해 매크로를 작성해야합니다.