项目需要在页面添加一个导出Excel表格模板,在Excel中固定几个字段名称,在java代码中以字符流的形式写入。
1.页面上添加一个导出模板按钮,点击导出Excel模板。在前台js中绑定一个click事件,用form表单的请求方式提交到后台。(layer.close();关闭当前的弹框)
$('#bargeCompanyFormExport').click(function(){
layer.msg('确认导出文件??', {
time: 0,
btn: ['确认', '再想想'],
yes: function(index) {
top.layer.close(index);
var $form = $('#form_index');
$form.attr('method', 'post');
$form.attr('action', '${rc.contextPath}/boship/exportForm');
$form.submit();
$form.attr('action', '${rc.contextPath}/boship/index');
return false;
}
});
})
2.后台接收导出功能的请求,@RequestMapping("/exportForm") 调用service的exportForm()方法,最后返回index页面。
@RequestMapping("/exportForm")
public String exportForm(HttpServletRequest request, HttpServletResponse response) throws Exception {
dnCtnrDetailService.exportForm(response);
return INDEX;
}
3.service层的实现方法 (filename的处理目前不支持中文)
@Override
public void exportForm(HttpServletResponse response) {
try {
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet dockSheet=wb.createSheet("驳船计划");
for(int i =0;i<2;i++){
int yq=i;
HSSFRow yqRow = dockSheet.createRow(yq);
HSSFCell so_no = yqRow.createCell(0);
HSSFCell etd_time = yqRow.createCell(1);
HSSFCell cutTime = yqRow.createCell(2);
HSSFCell box_type = yqRow.createCell(3);
HSSFCell sailing_ship = yqRow.createCell(4);
HSSFCell port = yqRow.createCell(5);
HSSFCell remark = yqRow.createCell(6);
if(i==0){
so_no.setCellValue("SO号");
etd_time.setCellValue("ETD");
cutTime.setCellValue("大船截重时间");
box_type.setCellValue("箱型");
sailing_ship.setCellValue("驳船公司");
port.setCellValue("中转港");
remark.setCellValue("备注");
}else{
so_no.setCellValue("SKCA008639");
etd_time.setCellValue("2018/7/4");
cutTime.setCellValue("2018/7/11");
box_type.setCellValue("40HQ");
sailing_ship.setCellValue("广运");
port.setCellValue("香港");
remark.setCellValue("模板样例");
}
}
dockSheet.autoSizeColumn(0,true);
dockSheet.autoSizeColumn(1,true);
dockSheet.autoSizeColumn(2,true);
dockSheet.autoSizeColumn(3,true);
dockSheet.autoSizeColumn(4,true);
dockSheet.autoSizeColumn(5,true);
dockSheet.autoSizeColumn(6,true);
response.reset();
response.setContentType("multipart/form-data"); //自动识别
response.setHeader("Content-disposition", "attachment; filename=shipplane.xls");
OutputStream output = response.getOutputStream();
wb.write(output);
output.flush();
output.close();
} catch (Exception e) {
e.printStackTrace();
}
}