Ich verwende Apache POI API
zum Generieren, excel spreadsheet
um einige Daten auszugeben.
Das Problem, mit dem ich konfrontiert bin, besteht darin, dass beim Erstellen und Öffnen der Tabelle Spalten nicht erweitert werden, sodass Langtext wie datumsformatierter Text nicht auf den ersten Blick angezeigt wird.
Ich könnte einfach auf den Spaltenrand in Excel doppelklicken, um ihn zu erweitern, oder den Rand ziehen, um die Spaltenbreite anzupassen, aber es könnten mehr als 20 Spalten vorhanden sein, und ich möchte dies auf keinen Fall jedes Mal manuell tun, wenn ich die Tabelle öffne :(
Ich fand es heraus (obwohl es eine falsche Methode sein könnte ) groupRow()
und setColumnGroupCollapsed()
könnte den Trick machen, aber kein Glück. Vielleicht benutze ich es falsch.
Beispielcode-Snippet
Workbook wb = new HSSFWorkbook();
CreationHelper createHelper = wb.getCreationHelper();
//create sheet
Sheet sheet = wb.createSheet("masatoSheet");
//not really working yet.... :(
//set group for expand/collapse
//sheet.groupRow(0, 10); //just random fromRow toRow argument values...
//sheet.setColumnGroupCollapsed(0, true);
//create row
Row row = sheet.createRow((short)0);
//put a cell in the row and store long text data
row.createCell(0).setCellValue("Loooooooong text not to show up first");
Wenn diese Tabelle erstellt wird, befindet sich die Zeichenfolge "Looooooong-Text, der nicht zuerst angezeigt wird" in der Zelle. Da die Spalte jedoch nicht erweitert wird, wird nur "Loooooooo" angezeigt.
Wie kann ich es so konfigurieren, dass beim Öffnen meiner Tabelle die Spalte bereits erweitert wird?
quelle
Antworten:
Nachdem Sie alle Ihre Daten zum Blatt hinzugefügt haben, können Sie
autoSizeColumn(int column)
Ihr Blatt aufrufen, um die Spalten automatisch auf die richtige Größe anzupassenHier ist ein Link zur API .
Weitere Informationen finden Sie in diesem Beitrag. Problem beim Anpassen der Excel-Zellengröße an die Größe des Inhalts bei Verwendung von Apache Poi
quelle
autoSizeColumn
nicht skaliert gut und sein Super langsam , wenn Sie viele Zeilen haben. Ich musste ein wenig hacky werden und etwas Ähnliches tun, wie es in dieser Frage vorgeschlagen wurde .Tipp: Um die automatische Größe Arbeit zu machen, um der Anruf
sheet.autoSizeColumn(columnNumber)
gemacht werden soll , nachdem bevölkerte die Daten in die Excel.Das Aufrufen der Methode vor dem Auffüllen der Daten hat keine Auswirkung.
quelle
(5 until row.lastCellNum).forEach { colNum -> val columnWidth = (row.getCell(colNum).toString().length * 0.44 + 2.24) * 768 reportSheet.setColumnWidth(colNum, columnWidth.toInt()) }
Wenn Sie die Größe aller Spalten in einer Arbeitsmappe automatisch ändern möchten, ist folgende Methode hilfreich:
quelle
NullPointerException
anrow.cellIterator()
. Liegt es daran, dass ich keinen Wert in einer der Zellen habe?Sie können so etwas ausprobieren:
Hier sind die Parameter: Spaltennummer im Blatt und seine Breite Die Breiteneinheiten sind jedoch ziemlich klein. Sie können beispielsweise 4000 ausprobieren.
quelle
Für Excel POI:
quelle
Beispielcode unten
// das ist entscheidend
// Argument muss Zellennummer sein
Überprüfen Sie die Ausgabe und verrückt werden :)
quelle
Wenn Sie die Anzahl Ihrer Spalten kennen (zB entspricht dies einer Sammlungsliste). Sie können einfach diesen einen Liner verwenden, um alle Spalten eines Blattes anzupassen (wenn Sie mindestens Java 8 verwenden):
quelle
Ich benutze unten einfache Lösung:
Dies ist Ihre Arbeitsmappe und Ihr Arbeitsblatt:
Fügen Sie dann Ihrem Blatt Daten mit Spalten und Zeilen hinzu. Wenn Sie mit dem Hinzufügen von Daten zum Blatt fertig sind, schreiben Sie den folgenden Code in die
autoSizeColumn
Breite.Hier fügen Sie statt 15 die Anzahl der Spalten in Ihrem Blatt hinzu.
Hoffe jemand hilft das.
quelle
Es ist sehr einfach, verwenden Sie diesen einzeiligen Code dataSheet.autoSizeColumn (0)
oder geben Sie die Anzahl der Spalten in Klammern an dataSheet.autoSizeColumn (Zellennummer)
quelle
Sie können den Text auch umbrechen. PFB-Beispielcode:
quelle
Sie können verwenden,
setColumnWidth()
wenn Sie Ihre Zelle weiter erweitern möchten.quelle