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.
java
apache-poi
Malutki
źródło
źródło
Odpowiedzi:
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 topRow
sekcja zostanie usunięta i możesz użyć justSheet.createFreezePane(int colSplit, int rowSplit)
na przykład
sheet1.createFreezePane(0, 5); // this will freeze first five rows
źródło
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:
Nie znam szczegółów tego, ale warto byłoby to zbadać, jeśli jesteś na tej łodzi.
źródło
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.
źródło