2016-10-26 6 views
3

jxlライブラリを使用してExcelファイルを作成しました。コードは正常に動作していますが、唯一の問題は、サービスからの動的な値からExcelファイルを構築するたびに、Excelの内容がtest.xlsに上書きされていることです。javaを使用してメモリにExcelファイルを作成し、ダウンロード用のバイトとして渡す

File file = new File("test.xls"); 
WritableWorkbook workbook = Workbook.createWorkbook(file); 
: 
: 
: 
: 

InputStream in = new FileInputStream(file); 

if (in == null) { 
    out.close(); 
} 
else 
{ 
    byte[] buffer = new byte[4096]; 
    int len; 

    while ((len = in.read(buffer)) != -1) { 
     out.write(buffer, 0, len); 
    } 

    out.flush(); 
    in.close(); 
    out.close(); 
} 

は、誰もがこの

答えて

3

に私を助けてくださいすることができ、メモリにExcelを構築し、(「Test.xlsをを」)、それをダウンロードする代わりに、外部ファイルを作成するためのバイトを渡す方法はありますByteArrayOutputStreamWorkbook.createWorkbook(OutputStream os)メソッドと組み合わせて使用​​して、メモリにブックを作成し、作成したバイト配列を任意の出力ストリームにダンプします。

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
WritableWorkbook workbook = Workbook.createWorkbook(baos); 

// ... 

workbook.close(); 
out.write(baos.toByteArray()); 
out.flush(); 
out.close(); 

また、あなたは中間のバイト配列を使用せずに、その場でそれを行うことができます:JXLはとにかくメモリでブックを維持し、それだけをフラッシュされるよう

WritableWorkbook workbook = Workbook.createWorkbook(out); 

// ... 

workbook.close(); 
out.flush(); 
out.close(); 

この方法は好ましいかもしれませんワークブックが閉じられたときにストリームを出力します。

+0

ありがとうたくさん.......... –

+0

Apache POIでこれを実現する方法はありますか?ありがとう –

0

POIを使用してExcelを作成し、それをバイトに変換する例です。

XSSFWorkbook workbook = new XSSFWorkbook(); 
    XSSFSheet sheet = workbook.createSheet("Sheet 1"); 

    Row row = sheet.createRow(1); 
    Cell cell = row.createCell(cellnum++); 
    cell.setCellValue((String) obj); 
    ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
    try { 
     workbook.write(bos); 
    } catch (IOException e) { 
    } finally { 
     try { 
      bos.close(); 
      workbook.close(); 
     } catch (IOException e) { 
     } 
    } 
    byte[] bytes = bos.toByteArray(); 
関連する問題