2016-04-10 43 views
0

2枚のExcelブックを作成する必要があります。私は次のコードを使用してExcelを作成し、後でダウンロードします。ただし、最初のシートは作成されますが、2枚目のシートは作成されていません。私は正確な理由を理解することができません。以下は、2枚のシートを作成するための部分です。SXSSFWorkbookを使用して複数のシートを含むExcelブックを作成する

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

問題が再現できません。しかし、あなたは 'OutputStream'をどこかで閉じなければなりません。執筆後に 'SXSSFWorkbook'を処分する必要があります。https://poi.apache.org/spreadsheet/how-to.html#sxssf –

+0

@AxelRichter私はoutputStreamを閉じます。あなたのSXSSFWorkbookを処分することはどういう意味ですか? – Ashley

+0

'((SXSSFWorkbook)outWorkbook).dispose();'前のコメント内のリンクを参照してください。 –

答えて

0

問題は、ここでシートを正しくエクスポートしていないことです。

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

すべてのシートが作成される前にdisposeが呼び出されない場合は、シートに書き込む必要があります。ここでは、私が参考になるように管理した例を示します。

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

} 
関連する問題