Ist jemand da draußen mit einer Möglichkeit vertraut, eine Zeile in einer mit Apache POI 3.7 erstellten Tabelle zu sperren? Mit Sperren meine ich, dass die Titelzeile für die Spalten sichtbar bleiben soll, wenn der Benutzer durch die Zeilen blättert. Meine erstellte Tabelle hat 500 Zeilen und es wäre vorteilhaft, wenn die Namen der Spalte immer sichtbar wären.
java
apache-poi
Winzig
quelle
quelle
Antworten:
Falls Sie eine bestimmte Zeile an einer beliebigen Stelle im Blatt einfrieren müssen, können Sie (Innerhalb
org.apache.poi.ss.usermodel.Sheet
) verwenden (auch in POI 3.7 verfügbar).Sheet.createFreezePane(int colSplit, int rowSplit, int leftmostColumn, int topRow)
In Ihrem Fall, wenn Sie nur Ihre ersten x Zeilen einfrieren möchten, wird der
int leftmostColumn, int topRow
Abschnitt entfernt und Sie können nur verwendenSheet.createFreezePane(int colSplit, int rowSplit)
zum Beispiel
sheet1.createFreezePane(0, 5); // this will freeze first five rows
quelle
Dazu können Sie einen Einfrierbereich wie folgt erstellen:
workbook.getSheetAt(workbook.getActiveSheetIndex()).createFreezePane(0, 1);
Dadurch wird die erste Reihe eingefroren. Es gibt eine andere Methode mit mehr Optionen. Schauen Sie sich also die API an .
Das einzige, was Sie beachten sollten, ist, wenn Sie XSSF-Arbeitsmappen verwenden. In Version 3.8-beta3 wird ein Bugfix erwähnt, der das Verhalten von Freeze-Fenstern mithilfe von XSSF-Tabellen korrigiert hat:
Ich kenne die Details nicht, aber es lohnt sich zu untersuchen, ob Sie in diesem Boot sind.
quelle
Sie können eine mittlere Reihe nicht einfrieren, ohne dass die darüber liegenden Reihen ebenfalls eingefroren werden.
Angenommen, Sie haben 100 Zeilen und Ihre Kopfzeile befindet sich in Zeile 50. Sie können davon ausgehen, dass nur Zeile 50 gesperrt wird, sodass beim Scrollen von Zeile 1-49 alles nach oben gescrollt wird und die 50. Zeile bei Erreichen von Zeile 50 zu Zeile 50 gescrollt wird oben und bleibt dort, wenn die Zeilen 51-100 gescrollt werden.
Es gibt jedoch eine Problemumgehung. Sie können die Zeilen gruppieren und dann einfrieren.
Gruppieren Sie zuerst die Zeilen von 1 bis 49 und frieren Sie dann die Fenster von 1 bis 50 ein. Jetzt kann der Benutzer die Gruppe minimieren und dann mit der Tabelle arbeiten, wobei der Tabellenkopf gesperrt und oben ist.
sheet.groupRow(0, 49); sheet.createFreezePane(0, 50);
Es gibt jedoch einen kleinen Haken. In MS Excel können Sie eine Gruppe nicht erweitern / reduzieren, wenn das Blatt geschützt ist. Dazu müssen Sie ein Makro schreiben.
quelle