分析接口:
响应类型:
xlx文件
具体方法:
@RequestMapping(value = "export.action")
public void export(HttpServletResponse response, HttpServletRequest request) throws IOException {
List<BcSubarea> bcSubareas = this.bcSubareaServiceI.findAll();
List<BcSubareaVo> bcSubareaVos = new ArrayList<>(bcSubareas.size());//通过避免扩容优化性能
for(BcSubarea bcSubarea:bcSubareas){
BcRegion bcRegion = this.bcRegionServiceI.findById(bcSubarea.getRegionId());
BcSubareaVo bcSubareaVo = new BcSubareaVo();
BeanUtils.copyProperties(bcSubarea,bcSubareaVo);
bcSubareaVo.setBcRegion(bcRegion);
bcSubareaVos.add(bcSubareaVo);
}
HSSFWorkbook wk = new HSSFWorkbook();
HSSFSheet hs = wk.createSheet("分区数据");
//3 创建标题行
HSSFRow row = hs.createRow(0);
row.createCell(0).setCellValue("分区编号");
row.createCell(1).setCellValue("区域编号");
row.createCell(2).setCellValue("关键字");
row.createCell(3).setCellValue("省市区");
for (BcSubareaVo bcSubareaVo : bcSubareaVos) {
row=hs.createRow(hs.getLastRowNum()+1);
row.createCell(0).setCellValue(bcSubareaVo.getId());
row.createCell(1).setCellValue(bcSubareaVo.getBcRegion().getId());
row.createCell(2).setCellValue(bcSubareaVo.getAddresskey());
row.createCell(3).setCellValue(bcSubareaVo.getBcRegion().getProvince()+bcSubareaVo.getBcRegion().getCity());
}
String fileName = URLEncoder.encode("分区数据.xls", "UTF-8");
response.setContentType(request.getSession().getServletContext().getMimeType(fileName));
response.setHeader("content-disposition", "attchment;filename="+fileName);
wk.write(response.getOutputStream());
}
查看结果
分区编号 | 区域编号 | 关键字 | 省市区 |
111 | 01571755ef484f439e2e8fb08287e6d3 | 11 | 北京市北京市 |
1111 | 0ddc5ce432734b239fb8cd466b95bb94 | 1111 | 河北省石家庄市 |
11111 | 0ddc5ce432734b239fb8cd466b95bb94 | 11 | 河北省石家庄市 |
1111111 | 0ddc5ce432734b239fb8cd466b95bb94 | 1111 | 河北省石家庄市 |
456 | 125388810ea9427c9e074f9a622a4c65 | 456 | 山西省太原市 |
总结:
当进入export方法时找寻一次数据库,通过创建HSSFWorkbook 对象,依次使用createSheet 、createRow、createCell、setCellValue (依次实现了创建工作表、行、单元格、设值)通过控制getLastRowNum创建一行数据。通过request和response对请求头的设置,使用HSSFWorkbook 中的write