后台导出方法:
在源文件夹src下面放个准备好的模板:/com/cy/template/userExportTemplate.xls,这个模板有头部一行;
1 /** 2 * 后台导出方法 3 * 利用POI实现使用模板批量导出数据 4 */ 5 public String export2() throws Exception{ 6 Connection con = null; 7 try{ 8 con = dbUtil.getCon(); 9 ResultSet rs = userDao.userList(con, null); 10 Workbook wb = ExcelUtil.fillExcelDataWithTemplate(rs, "userExportTemplate.xls"); 11 12 //把wb以流的形式输出 13 ResponseUtil.export(ServletActionContext.getResponse(), wb, "利用模板导出Excel.xls"); 14 }catch(Exception e){ 15 e.printStackTrace(); 16 }finally{ 17 try{ 18 dbUtil.closeCon(con); 19 dbUtil.closeRs(rs); 20 }catch(Exception e){ 21 e.printStackTrace(); 22 } 23 } 24 25 return null; 26 }
处理Excel的Util:
先读取这个模板,创建一个工作簿Workbook,然后塞数据,再返回这个工作簿,相当于对模板做了修改。
1 /** 2 * 处理Excel的util 3 */ 4 public class ExcelUtil{ 5 6 public static Workbook fillExcelDataWithTemplate(ResultSet rs, String templateFileName) throws Exception{ 7 InputStream is = ExcelUtil.class.getResourceAsStream("/com/cy/template/"+templateFileName); 8 POIFSFileSystem pfs = new POIFSFileSystem(is); 9 Workbook wb = new HSSFWorkbook(pfs); 10 Sheet sheet = wb.getSheetAt(0); //获取模板的第一个sheet页 11 int cellNums = sheet.getRow(0).getLastCellNum(); //获取列数 12 int rowIndex = 1; //从第二行开始 13 Row row = null; 14 while(rs.next()){ 15 row = sheet.createRow(rowIndex++); 16 for(int i=0; i<cellNums; i++){ 17 row.createCell(i).setCellValue(rs.getObject(i).toString()); 18 } 19 } 20 21 return wb; 22 } 23 }
导出的Excel: