2016-04-10 6 views
0

Ich muss eine Excel-Arbeitsmappe mit zwei Blättern erstellen. Ich verwende den folgenden Code, um das Excel zu erstellen und später wird es heruntergeladen. Das erste Blatt wird jedoch erstellt, aber das zweite Blatt wird nicht erstellt. Ich kann den genauen Grund nicht verstehen. Das Folgende ist der Teil, durch den ich die zwei Blätter erzeuge.Erstellen einer Excel-Arbeitsmappe mit mehreren Blättern mit SXSSFWorkbook

+0

Funktioniert für mich, kann Ihr Problem nicht reproduzieren. Aber Sie müssen Ihren 'OutputStream' irgendwo schließen. Und Sie müssen Ihr 'SXSSFWorkbook' nach dem Schreiben entsorgen, siehe: https://poi.apache.org/spreadsheet/how-to.html#sxssf –

+0

@AxelRichter Ich schließe outputStream. Was meinst du damit, dein SXSSFWorkbook zu entsorgen? – Ashley

+0

'((SXSSFWorkbook) outWorkbook) .dispose();' Siehe den Link in meinem vorherigen Kommentar. –

Antwort

0

Das Problem besteht darin, dass Sie das Blatt hier nicht korrekt exportieren.

outWorkbook.setSheetHidden(outWorkbook.getSheetIndex(SECOND_SHEET_NAME), 
false); 
try 
{ 
    outWorkbook.write(outputStream); 
} 
catch(IOException) 
{ 
    String errorMsg = "Failed to write to workbook"; 
    log.error(errorMsg, e); 
} 

Wenn die Option "dispose" nicht aufgerufen wird, bevor alle Blätter erstellt wurden, sollten die Blätter geschrieben werden. Hier ist ein Beispiel, das mir als Referenz gelungen ist.

static String outPath = "path"; 
static String fileName = "test.xlsx"; 

public static void main(String[] args) throws Throwable { 

    ApacheExample1 a = new ApacheExample1(); 

    a.runExport("test"); 

} 

private void runExport(String tag) throws IOException { 
    SXSSFWorkbook wb = new SXSSFWorkbook(); 
    Sheet sh1 = wb.createSheet("Sheet" + 1); 
    Sheet sh2 = wb.createSheet("Sheet" + 2); 
    String[] v1 = {"test", "one"}; 
    String[] v2 = {"test", "two"}; 
    writeSXSSLRow(0, 0, sh1, v1); 
    writeSXSSLRow(0, 0, sh2, v2); 

    writeToFile(wb); 

} 

private static void writeToFile(SXSSFWorkbook wb) throws IOException { 
    File f = new File(outPath); 
    if (!f.exists()) { 
     f.createNewFile(); 
    } 
    FileOutputStream out = new FileOutputStream(outPath + fileName); 
    wb.write(out); 
    out.close(); 

    //After everything is written, then we dispose the temp file. 
    wb.dispose(); 
} 

private static void writeSXSSLRow(int colStart, int cellRow, Sheet ws, String[] v) throws IOException { 
    Row row = ws.createRow(cellRow); 
    for (int col = colStart; col < colStart + v.length; col++) { 
     Cell cell = row.createCell(col); 
     cell.setCellValue(v[col - colStart]); 
    } 

}