java web中使用POI实现excel文件的导入和导出
文件导出
1 //导入excle表 2 public String exportXls() throws IOException{ 3 //1.查询所有需要的数据 4 List<Subarea> list = subareaService.findAll(); 5 //2.使用POI将数据写进excel表中 6 //2.1在内存中创建一个excel文件 7 HSSFWorkbook workbook = new HSSFWorkbook(); 8 //2.2创建一个标签页 9 HSSFSheet sheet = workbook.createSheet("分区数据"); 10 //2.3创建标题行 11 HSSFRow headRow = sheet.createRow(0); 12 headRow.createCell(0).setCellValue("分区编号"); 13 headRow.createCell(1).setCellValue("开始编号"); 14 headRow.createCell(2).setCellValue("结束编号"); 15 headRow.createCell(3).setCellValue("位置信息"); 16 headRow.createCell(4).setCellValue("省市区"); 17 //2.4将需要的数据放入excel表中 18 for (Subarea subarea : list) { 19 HSSFRow dataRow = sheet.createRow(sheet.getLastRowNum()+1); 20 headRow.createCell(0).setCellValue(subarea.getId()); 21 headRow.createCell(1).setCellValue(subarea.getStartnum()); 22 headRow.createCell(2).setCellValue(subarea.getEndnum()); 23 headRow.createCell(3).setCellValue(subarea.getPosition()); 24 headRow.createCell(4).setCellValue(subarea.getRegion().getName()); 25 } 26 27 //3.输出流进行文件下载 28 String filename = "分区信息表.xls"; 29 String mimeType = ServletActionContext.getServletContext().getMimeType(filename); 30 ServletOutputStream outs = ServletActionContext.getResponse().getOutputStream(); 31 32 33 //获取客户端的浏览器类型 34 String agent = ServletActionContext.getRequest().getHeader("User-Agent"); 35 filename = FileUtils.encodeDownloadFilename(filename, agent); 36 ServletActionContext.getResponse().setHeader("content-disposition", 37 "attachment;filename"+filename); 38 39 workbook.write(outs); 40 return NONE; 41 }
针对不同浏览器下载使用的工具类
/** * 下载文件时,针对不同浏览器,进行附件名的编码 * * @param filename * 下载文件名 * @param agent * 客户端浏览器 * @return 编码后的下载附件名 * @throws IOException */ public static String encodeDownloadFilename(String filename, String agent) throws IOException { if (agent.contains("Firefox")) { // 火狐浏览器 filename = "=?UTF-8?B?" + new BASE64Encoder().encode(filename.getBytes("utf-8")) + "?="; filename = filename.replaceAll("\r\n", ""); } else { // IE及其他浏览器 filename = URLEncoder.encode(filename, "utf-8"); filename = filename.replace("+", " "); } return filename; }