Wiersze nagłówków blokowania punktów POI Apache

84

Czy ktoś zna sposób na zablokowanie wiersza w arkuszu kalkulacyjnym utworzonym w Apache POI 3.7? Poprzez blokowanie rozumiem, że chcę, aby wiersz tytułu dla kolumn pozostawał widoczny, gdy użytkownik przewija wiersze. Utworzony przeze mnie arkusz kalkulacyjny będzie miał 500 wierszy i byłoby dobrze, gdyby nazwy kolumn były zawsze widoczne.

Malutki
źródło
2
POI 3.7 jest już trochę stary, czy jest jakiś powód, dla którego nie używasz najnowszej wersji?
Gagravarr
2
Tak, to co upoważnił mój pracodawca.

Odpowiedzi:

130

W przypadku konieczności zamrożenia dowolnego wiersza w dowolnym miejscu arkusza, możesz użyć opcji (Wewnątrz org.apache.poi.ss.usermodel.Sheet) (dostępne również w POI 3.7)

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

W twoim przypadku, jeśli chcesz zamrozić tylko pierwsze x wierszy, int leftmostColumn, int topRowsekcja zostanie usunięta i możesz użyć just

Sheet.createFreezePane(int colSplit, int rowSplit)

na przykład

sheet1.createFreezePane(0, 5); // this will freeze first five rows
Sankumarsingh
źródło
Chcę zamrozić tylko pierwszą kolumnę i wiersz nr 17, uprzejmie zasugeruj mi, jak to osiągnąć. Z góry dziękuję.
Ashish Burnwal
17

Aby to zrobić, możesz utworzyć okienko zamrażania w następujący sposób:

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

Spowoduje to zamrożenie pierwszego rzędu na miejscu. Istnieje inna metoda z większą liczbą opcji, więc sprawdź interfejs API .

Jedyną rzeczą, na którą należy zwrócić uwagę, jest to, że używasz skoroszytów XSSF - jest wzmianka o poprawce błędu w wersji 3.8-beta3, która naprawiła zachowanie zamrożonych okienek przy użyciu arkuszy kalkulacyjnych XSSF:

50884 - Okienka zamrożenia XSSF i HSSF zachowują się teraz tak samo

Nie znam szczegółów tego, ale warto byłoby to zbadać, jeśli jesteś na tej łodzi.

akokskis
źródło
1

Nie można zamrozić środkowego rzędu bez zamrożenia wierszy powyżej.

Załóżmy, że masz 100 wierszy, a wiersz nagłówka jest w wierszu 50. Można się spodziewać, że tylko wiersz 50 zostanie zablokowany, tak że podczas przewijania z wiersza 1-49 wszystko jest przewijane w górę, a kiedy dojdzie do wiersza 50, wiersz 50 przewija się do na górze i pozostaje tam, gdy przewijane są wiersze 51-100.

Ale istnieje obejście. Możesz zgrupować wiersze, a następnie je zablokować.

Najpierw pogrupuj wiersze od 1 do 49, a następnie zamroź okienka od 1 do 50. Teraz użytkownik może zminimalizować grupę, a następnie pracować z tabelą z zablokowanym nagłówkiem tabeli na górze.

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

Jest jednak mały haczyk. MS Excel nie pozwoli ci rozwinąć / zwinąć grupy, jeśli arkusz jest chroniony. W tym celu musisz napisać makro.

Mithun P. John
źródło