/** * 公共組件,導出Excel表格數據方法<p> * 使用方法: 數據爲List<Object>類型,注意當中object的屬性理論上必須爲java基本數據類型 * 固然也支持像日期這種格式,即完整支持數據庫中字段類型 * @author pery * @param className 數據模型Object的類完整名稱 * ,eg:com.swust.kelab.Department * @param propertyName 數據模型類的屬性對應的列名, * 如「depaId」對應列表「機構id「, * 未指定列名的屬性不會被導出 * @param tableName 導出的excel中的表名稱 * @param objectList 要導出的數據集 * @return 成功返回true,失敗返回false; */
public static boolean exportExcel(String className, Map propertyName, String tableName, List<? extends Object> objectList, HttpServletResponse resp) throws IOException { resp.setCharacterEncoding("UTF-8"); resp.setContentType("application/x-download"); long now = System.currentTimeMillis(); String filedisplay = "導出用戶信息"+now+".xls"; filedisplay = URLEncoder.encode(filedisplay, "UTF-8"); resp.addHeader("Content-Disposition", "attachment;filename="+ filedisplay); HSSFWorkbook wbook = new HSSFWorkbook(); HSSFSheet wsheet = wbook.createSheet(tableName); //表名 HSSFCellStyle cellStyle=getStyle(wbook); // 設置Excel表頭 HSSFRow excelTitle = wsheet.createRow(0); excelTitle.setHeightInPoints(22); if(objectList.size()<=0){ wsheet.autoSizeColumn(0); HSSFCell titleCell = excelTitle.createCell(0); titleCell.setCellValue("對不起,沒有可用數據導出"); titleCell.setCellStyle(cellStyle); } Class c = null; try { c = Class.forName(className); } catch (ClassNotFoundException e1) { System.out.println("傳入反射用到的類名字有誤"); e1.printStackTrace(); return false; } java.lang.reflect.Field[] flds = c.getDeclaredFields(); int j=0; for (int i = 0; i < flds.length; i++) { String columName=flds[i].getName(); if(propertyName.containsKey(columName)){ wsheet.setColumnWidth(j+1, (int)(100*35.7)); HSSFCell titleCell = excelTitle.createCell(j++); titleCell.setCellValue((String)propertyName.get(columName)); titleCell.setCellStyle(cellStyle); } } for (int i = 0; i < objectList.size(); i++) { Object obj = objectList.get(i); HSSFRow row = wsheet.createRow(i + 1); int k=0; for (j = 0; j < flds.length; j++) { String columName=flds[j].getName(); if(!propertyName.containsKey(columName)){ continue; } HSSFCell hssfCell = row.createCell(k++); try { flds[j].setAccessible(true); Object t = flds[j].get(obj); if(t instanceof Date){ t = dateFormat.format(t); } if(t!=null){ hssfCell.setCellValue(String.valueOf(t)); } } catch (IllegalArgumentException e) { System.out.println("該字段不是基本數據格式字段"); e.printStackTrace(); } catch (IllegalAccessException e) { System.out.println("非法訪問"); e.printStackTrace(); } } } try { OutputStream out = resp.getOutputStream(); wbook.write(out); out.flush(); out.close(); } catch (FileNotFoundException e) { System.out.println("文件路徑錯誤"); e.printStackTrace(); } catch (IOException e) { System.out.println("I/O錯誤"); e.printStackTrace(); } return true; }
controllerjava
public Object export(String username, String name, Integer state, HttpServletRequest request, HttpServletResponse response){ List<AdminEntity> adminEntityList = new ArrayList<>(); Map<String, Object> url = new HashMap<String, Object>(); ResultEntity resultEntity = new ResultEntity(); Integer status = 1; String message = null; AdminWebserviceService adminWebserviceService = new AdminWebserviceService(); Admin admin = adminWebserviceService.getAdminPort(); SoapHandler.handleSoap(admin); try { String operate = "導出用戶信息"; addLog(operate, request); Map<String, Object> map = new HashMap<String, Object>(); map.put("id","用戶ID"); map.put("username","登陸名"); map.put("name","真實姓名"); map.put("departmentTitle","部門名稱"); map.put("roleTitle","角色"); map.put("mobile","電話"); map.put("email","郵箱"); map.put("createState","狀態"); map.put("createAdmin","建立人"); map.put("createTime","建立時間"); List<CaAdmin> caAdminList = admin.getList2(username,name,state); for (CaAdmin caAdmin : caAdminList) { AdminEntity adminEntity = new AdminEntity(); CaRole caRole = admin.findRolesByUsername(caAdmin.getUsername()); CaDepartment caDepartment = admin.findDepartmentByDepartmentId(caAdmin.getDepartmentId()); //tools.converJavaBean 將class2中的屬性值賦值給class1 tools.converJavaBean(adminEntity, caAdmin); adminEntity.setRoleTitle(caRole.getTitle()); adminEntity.setDepartmentTitle(caDepartment.getTitle()); if(caAdmin.getState()==1){ adminEntity.setCreateState("啓用"); }else adminEntity.setCreateState("禁用"); adminEntityList.add(adminEntity); } //ExportAsExcel.exportExcel 導出到Excel Boolean a= ExportAsExcel.exportExcel("com.xxx.entity.AdminEntity",map,"用戶信息表",adminEntityList,response); if(a){ //url.put("url",file); }else{ status = 0; message = "服務器錯誤"; } } catch (Exception e) { status = 0; message = "服務器錯誤"; } resultEntity.setStatus(status); resultEntity.setObj(url); resultEntity.setMessage(message); return resultEntity; }
結果輸出一個文件流數據庫