Frage

ich benutze Apache POI API generieren excel spreadsheet einige Daten ausgeben.

Das Problem, mit dem ich ausgesetzt bin, ist, wenn die Tabelle erstellt und geöffnet wird, werden die Spalten nicht erweitert, sodass ein langer Text wie Datum formatierte Text auf den ersten Blick nicht angezeigt wird.

Ich könnte einfach den Spaltenrand in Excel verdoppeln, um den Rand zu erweitern oder zu ziehen, um die Spaltenbreite anzupassen, aber es könnte mehr als 20 Spalten geben, und ich möchte das nicht jedes Mal manuell tun, wenn ich die Tabelle öffne :(

Ich habe es herausgefunden (obwohl es falsch sein könnte) groupRow() und setColumnGroupCollapsed() Könnte in der Lage sein, den Trick zu 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 der "Looooooong -Text, der nicht zuerst angezeigt wird" in der Zelle, aber da die Spalte nicht nur "Loooooooo" erweitert wird.

Wie kann ich es so konfigurieren, dass die Spalte bereits erweitert wird, wenn ich meine Tabelle öffne?

War es hilfreich?

Lösung

Nach Sie haben alle Ihre Daten zum Blatt hinzugefügt, Sie können anrufen autoSizeColumn(int column) Auf Ihrem Blatt, um die Spalten auf die richtige Größe zu automatisieren

Hier ist ein Link zum API.

Weitere Informationen finden Sie in diesem BeitragProblem bei der Anpassung der Excel -Zellgröße an die Größe des Inhalts bei Verwendung von Apache POI

Andere Tipps

Tipp : Um die automatische Größe zum Laufen zu bringen, der Anruf an sheet.autoSizeColumn(columnNumber) sollte gemacht werden nach Die Daten in die Excel einfüllen.

Das Aufrufen der Methode, bevor die Daten bevölkert werden, hat keinen Einfluss.

Wenn Sie alle Spalten in einer Arbeitsmappe automatisch Größe automatisch Größe haben möchten, finden Sie hier eine Methode, die möglicherweise nützlich ist:

public void autoSizeColumns(Workbook workbook) {
    int numberOfSheets = workbook.getNumberOfSheets();
    for (int i = 0; i < numberOfSheets; i++) {
        Sheet sheet = workbook.getSheetAt(i);
        if (sheet.getPhysicalNumberOfRows() > 0) {
            Row row = sheet.getRow(sheet.getFirstRowNum());
            Iterator<Cell> cellIterator = row.cellIterator();
            while (cellIterator.hasNext()) {
                Cell cell = cellIterator.next();
                int columnIndex = cell.getColumnIndex();
                sheet.autoSizeColumn(columnIndex);
            }
        }
    }
}

Für Excel Poi:

sheetName.autoSizeColumn(cellnum); 

Sie können so etwas ausprobieren:

HSSFSheet summarySheet = wb.createSheet();
summarySheet.setColumnWidth(short column, short width);

Hier sind die Parameter: Spaltennummer in Blatt und ihre Breite, aber die Breiteneinheiten sind ziemlich klein, Sie können zum Beispiel 4000 versuchen.

Beispielcode unten

HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("your sheet name");
HSSFRow row = sheet.createRow(0);

cell = row.createCell(0);
cell.setCellValue("A BIG NAME WITH AUTO SIZE FEATURE ENABLED");

// Das ist entscheidend

sheet.autoSizeColumn(0);

// Argument muss die Zellnummer sein

cell = row.createCell(1);
cell.setCellValue("a big name without auto size feature enabled");

Überprüfen Sie die Ausgabe und gehen Sie Nüsse :)

Wenn Sie die Anzahl Ihrer Spalten kennen (Fe entspricht einer Sammelliste). Sie können einfach diesen einen Liner verwenden, um alle Spalten eines Blattes anzupassen (wenn Sie mindestens Java 8 verwenden):

IntStream.range(0, columnCount).forEach((columnIndex) -> sheet.autoSizeColumn(columnIndex));

Es ist sehr einfach, verwenden Sie dieses mit einem Zeilencode -Datenblatt.autosizecolumn (0)

oder geben Sie die Anzahl der Spalten in Bracket Datasheet.autosizecolumn (Zellnummer) an.

Sie können auch den Text einwickeln. PFB -Beispielcode:

CellStyle wrapCellStyle = new_workbook.createCellStyle();
                    wrapCellStyle.setWrapText(true);

Sie können verwenden setColumnWidth() Wenn Sie Ihr Zelle mehr erweitern möchten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top