poi模板導出數據
優點:導出的excel頁面布局整齊
1.導出的步驟代碼
con=dbUtil.getCon();//數據庫連接,根據需求修改 ResultSet rs=userDao.userList(con, null);//數據庫數據獲取 Workbook wb=ExcelUtil.fillExcelDataWithTemplate(userDao.userList(con, null), "userExporTemplate.xls");//模板寫入數據函數 ResponseUtil.export(ServletActionContext.getResponse(), wb, "利用模版導出excel.xls");//數據流推送到頁面
2.模板寫入數據函數
public class ExcelUtil { //基本導出函數 public static void fillExcelData(ResultSet rs,Workbook wb,String[] headers)throws Exception{ int rowIndex=0; Sheet sheet=wb.createSheet(); Row row=sheet.createRow(rowIndex++); for(int i=0;i<headers.length;i++){ row.createCell(i).setCellValue(headers[i]); } while(rs.next()){ row=sheet.createRow(rowIndex++); for(int i=0;i<headers.length;i++){ row.createCell(i).setCellValue(rs.getObject(i+1).toString()); } } } //模板導出函數 public static Workbook fillExcelDataWithTemplate(ResultSet rs,String templateFileName)throws Exception{ InputStream inp=ExcelUtil.class.getResourceAsStream("/com/java1234/template/"+templateFileName); POIFSFileSystem fs=new POIFSFileSystem(inp); Workbook wb=new HSSFWorkbook(fs); Sheet sheet=wb.getSheetAt(0); // 獲取列數 int cellNums=sheet.getRow(0).getLastCellNum(); int rowIndex=1; while(rs.next()){ Row row=sheet.createRow(rowIndex++); for(int i=0;i<cellNums;i++){ row.createCell(i).setCellValue(rs.getObject(i+1).toString()); } } return wb; } }
3.數據流寫出數據
public class ResponseUtil { public static void write(HttpServletResponse response,Object o)throws Exception{ response.setContentType("text/html;charset=utf-8"); PrintWriter out=response.getWriter(); out.print(o.toString()); out.flush(); out.close(); } public static void export(HttpServletResponse response,Workbook wb,String fileName)throws Exception{ response.setHeader("Content-Disposition", "attachment;filename="+new String(fileName.getBytes("utf-8"),"iso8859-1")); response.setContentType("application/ynd.ms-excel;charset=UTF-8"); OutputStream out=response.getOutputStream(); wb.write(out); out.flush(); out.close(); } }
4.導出的模板(定義好模板的樣式,需要插入的數據按row循環插入)