5

Excel ファイルをユーザーに返送しようとしています。何らかの方法で、Excel ファイルが空であっても破損します。ファイルを開くと、Excel でファイルが破損していると表示されます。

私が削除した場合

response.getOutputStream().write(excelService.exportEventsToCSV());

空のExcelファイルを取得します。

@RequestMapping(value = "/events/excel", method = RequestMethod.GET)
    public void getEventsAsExcel(HttpServletResponse response) {

        try {

            response.setHeader("Content-disposition", "attachment; filename=test.xls");
            response.getOutputStream().write(excelService.exportEventsToCSV());
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

私の XML 生成は非常に単純です。空のドキュメントのみ

@Override
public byte[] exportEventsToCSV() {
    try {

        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet worksheet = workbook.createSheet("POI Worksheet");
        HSSFCellStyle cellStyle = workbook.createCellStyle();


        workbook.write(fileOut);

        return workbook.getBytes();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}

アドバイスをお願いします。Springs Excel ビューを考えていましたが、ビューは必要ありません。ダウンロードしたファイルだけです。

4

1 に答える 1

12

workbook.getBytes()出力を取得するために非常に奇妙なことをしているようですが、それがあなたが思っているものを返していないと確信しています...

ワークブックを返すように変更することを強くお勧めします。exportEventsToCSVそうすれば、はるかに簡単に実行できます。

Workbook wb = excelService.exportEventsToCSV();
response.setHeader("Content-disposition", "attachment; filename=test.xls");
wb.write( response.getOutputStream() );

これは問題なく動作し、エンド ユーザーが期待していたようなものを提供するはずです。

于 2012-11-10T21:42:35.350 に答える