2016-04-10 21 views
0

ile birden çok sayfa içeren bir excel çalışma kitabı oluşturma İki sayfa içeren bir excel çalışma kitabı oluşturmalıyım. Excel oluşturmak için aşağıdaki kodu kullanıyorum ve daha sonra indiriliyor. Bununla birlikte, ilk sayfa oluşturulur, ancak ikinci sayfa oluşturulmuyor. Tam sebebi anlayamıyorum. Aşağıdaki iki sayfayı oluşturduğum kısımdır.SXSSFWorkbook

import java.io.OutputStream; 
import org.apache.poi.ss.usermodel.Sheet; 
import org.apache.poi.ss.usermodel.Workbook; 
import org.apache.poi.xssf.streaming.SXSSFWorkbook; 

ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 
private static final String SECOND_SHEET_NAME = "Sheet 2"; 

private static final String FIRST_SHEET_NAME = "Sheet 1" 

protected Sheet firstSheet; 
protected Sheet secondSheet; 
protected Workbook outWorkbook; 

//creating workbook 
outWorkbook = new SXSSFWorkbook(1); 
//create first sheet 
firstSheet = outWorkbook.createSheet(FIRST_SHEET_NAME); 

//create second sheet 
secondSheet = outWorkbook.createSheet(SECOND_SHEET_NAME); 
//setting the second sheet as unhidden 

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); 
} 
+0

Benim için çalışıyor, sorununuzu yeniden oluşturamıyor. Ama 'OutputStream'inizi bir yerlerde kapatmalısınız. Ve yazdıktan sonra 'SXSSFWorkbook' bırakmalısınız, bakınız: https://poi.apache.org/spreadsheet/how-to.html#sxssf –

+0

@AxelRichter ÇıkışStream'i kapatıyorum. SXSSFWorkbook'unuzu elden çıkararak ne demek istiyorsunuz? – Ashley

+0

((SXSSFWorkbook) outWorkbook) .dispose(); 'Önceki yorumumdaki bağlantıya bakın. –

cevap

0

Sorun, sayfayı doğru şekilde dışa aktarmıyor olmanızdır. Tüm tabakalar daha sonra yaprak yazmalısınız oluşturulmadan önce dispose çağrılmazsa

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); 
} 

. İşte referans için gelmeyi başardığım bir örnek.

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]); 
    } 

}