9

私はSpringコントローラーを持っています.Excelファイルを作成して返し、ブラウザーによってダウンロードされるようにしたいと思います。

私はJEXcelApiを使用しています。

これは私のコントローラーコードです

@RequestMapping(value="/excel/cols/{colString}/rows/{rowString}/", method = RequestMethod.GET)
@ResponseBody
public ResponseEntity<String> exportExcel(HttpServletResponse response,
    @PathVariable List<String> colString,
    @PathVariable List<String> rowString) throws JSONException, IOException, WriteException {
    WritableWorkbook workbook = Workbook.createWorkbook(new File("exported.xls"));
    WritableSheet sheet = workbook.createSheet("Exported",0);
    String[] cols = colString.get(0).split(",");
    String[] rows = rowString.get(0).split(","); 
    for(int i = 0; i < cols.length;i++){
        Label label = new Label(i,0, cols[i]);
        sheet.addCell(label);
    }
    int excelCol = 0;
    int excelRow = 1;
    for(int i = 0; i < rows.length;i++){
        Label label = new Label(excelCol,excelRow, rows[i]);
        sheet.addCell(label);
        excelCol++;
        if((i+1) % cols.length == 0){
            excelCol = 0;
            excelRow++;
        }
    }
    workbook.write();
    workbook.close();
    return null;
}

それ、どうやったら出来るの?設定できるコンテンツヘッダーがあると思います。SpringのAbstract Excelビュークラスを使用する方法があることは知っていますが、もっと簡単な方法はありますか?

4

1 に答える 1

11

Content-Dispositionヘッダーを設定する必要があります。

response.setHeader("Content-disposition","attachment; filename=" + yourFileName);

バイトを直接応答に書き込みますOutputStream

File xls = new File("exported.xls"); // or whatever your file is
FileInputStream in = new FileInputStream(xls);
OutputStream out = response.getOutputStream();

byte[] buffer= new byte[8192]; // use bigger if you want
int length = 0;

while ((length = in.read(buffer)) > 0){
     out.write(buffer, 0, length);
}
in.close();
out.close();

上記は比較的古いものです。これでを構築できResponseEntityますFileSystemResourceResourceHttpMessageConverter次に、上記で提案したように、Aがバイトをコピーします。Spring MVC を使用すると、サーブレット仕様のインターフェースとやり取りするよりも簡単になります。

于 2013-09-06T02:17:27.063 に答える