2015-01-16 5 views
0

Я создаю Excel-файл:Генерация XLS-файл из HSSFWorkbook

public byte[] createReport() { 
    List<ExportModel> exportModels = export.computeExportModels(); 
    HSSFWorkbook workbook = excelCreator.createWorkbook(exportModels); 

    // return workbook.getBytes(); 
    return getByteArray(workbook); 
} 

private byte[] getByteArray(HSSFWorkbook workbook) { 
    ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
    try { 
     workbook.write(bos); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } finally { 
     try { 
      bos.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
    return bos.toByteArray(); 
} 

Хотя это делает работу, он не работает с

workbook.getBytes(); 

Если я пытаюсь открыть сгенерированный XLS -file, Excel просто падает и не может его открыть. У вас есть опыт?

ответ

0

От Apache POI javadocs for HSSFWorkbook.getBytes():

общественного Byte [] GetBytes()

Метод GetBytes - получить байты только в HSSF частей файла XLS. Используйте это, чтобы самостоятельно создать POI POIFSFileSystem.

Excel .xls файлы должны быть завернуты в наружный OLE2 контейнер, например, сгенерированный POIFSFileSystem. Таким образом, вам необходимо либо не делать все, что сами, или просто позвоните HSSFWorkbook.write(OutputStream), которая делает все это для вас (как javadocs explain)

Если вы хотите написать HSSFWorkbook вне, и получить байты для него, а затем, если вам хочу сделать что-то очень специальное:

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
workbook.write(baos); 
bytes[] excelFile = baos.toByteArray(); 
Смежные вопросы