2016-03-22 4 views
1

Ich versuche, eine Zelle zu erstellen, weisen Sie ihr einen bereits vorhandenen Stil zu und legen Sie den Wert für diese Zelle fest. Dies kann durch die folgenden drei Codezeilen erreicht normalerweise werden:Apache POI - Erstellen einer Zelle, Festlegen eines Zellenwerts und Zellenstils in einem einzigen Befehl

HSSFRow row = sheetBenefits.createRow(rowNoPB+i); 
HSSFCell cell0 = row.createCell(1); 
cell0.setCellStyle(style); 
cell0.setCellValue(new String("Survey "+i)); 

jedoch die Zelle Schöpfung und Zuweisen den Wert kann auf eine einzige Zeile wie folgt reduziert werden:

row.createCell(1).setCellValue(new String("Survey "+i)); 

Ich bin nicht Lage, den Stil in dieser Linie zu setzen, wie:

row.createCell(1).setCellValue(new String("Survey"+i)).setCellStyle(style); 

der Fehler es mir „(String) auf dem primitiven Typ void Kann nicht aufrufen setCellValue“ ist gibt. Was ist der Fehler in diesem Fall? Wie kann ich alle 3 Ziele in einer einzigen Codezeile erreichen?

Antwort

1

Die Methode row.createCell gibt ein Objekt vom Typ HSSFCell zurück, so dass Sie eine weitere Methode darauf aufrufen können. Was tun Sie, indem Sie die Methode setCellValue aufrufen.

Aber diese Methode gibt void zurück - es gibt nichts zurück. Sie können also keine weiteren Methoden darauf aufrufen.

Was noch schlimmer ist, Sie haben das Ergebnis von row.createCell nirgendwo gespeichert, so dass Sie die Referenz verloren haben, die Sie erstellt haben. Sie müssen es wieder von der row abrufen, oder was ist besser - Sie müssen es in einer (lokalen) Variable an erster Stelle gespeichert haben.

Was Sie suchen, ist eine "flüssige Schnittstelle", wie sie von StringBuilder oder anderen Bauherren implementiert wird. Apache POI ist jedoch nicht mit einer flüssigen Schnittstelle ausgestattet, daher können Sie dies nicht tun.

Sie müssen mit dem ersten Stück Code gehen, den Sie geschrieben haben.

+0

Great! Danke vielmals! –

1

Die Rückgabetyp der setCellValue Methode ist void, so ist es nicht gültig, die setCellStyle Methode nach setCellValue Aufruf zu setzen.

Auf der anderen Seite können Sie eine statische Methode schreiben, um die Arbeit für Sie zu erledigen.

public static Cell addCell(Row row, int columnIndex, CellStyle cellStyle, String value) 
{ 
    Cell cell = row.createCell(columnIndex); 
    cell.setStyle(cellStyle); 
    cell.setValue(value); 
    return cell; 
} 

Um eine Zelle nur rufen Sie die statische Methode hinzufügen:

addCell(row, 1, cellStyle, "Hell World");