/**导出信息**/ @RequestMapping("fileUpload")//前台发出请求 @ResponseBody protected ResultBean fileUpload(@RequestBody Map<String, Object> map, HttpServletRequest request, HttpServletResponse response) { ResultBean result = new ResultBean(); try { String token=map.get("token").toString(); User user= (User) RedisCacheUtil.getCache(token); List<Reseller> list=new ArrayList<Reseller>();//获取对象的集合 List<Map<String, Object>> arrayList = new ArrayList<Map<String, Object>>();//创建Map的集合,用来存放转换成表格的数据 if (user == null) { result.setResultCode("-1"); result.setResultMsg("登录失效"); return result; } else { if (user.getTitle().equals("2")) { list = resellerService.resellerList(null, user.getOrgId(), "2"); } else { list = resellerService.resellerList(null, null, "1"); } for (Reseller reseller : list) {//遍历集合 Map<String, Object> pram = new LinkedHashMap<String, Object>();//创建key对应的键值对 pram.put("公司名称", reseller.getCompanyName()); pram.put("公司详细地址", reseller.getAddress()); pram.put("联系人", reseller.getContact()); pram.put("联系方式", reseller.getTel()); pram.put("是否开设专卖店(0否1是)", reseller.getIsshop()); String dis = reseller.getControlDistrict(); StringBuilder sb = new StringBuilder(); if (StringUtils.isNotEmpty(dis)) { if (dis.contains(",")) { String[] sd = dis.split(","); for (String sf : sd) { District dt = districtMapper.selectByPrimaryKey(Integer.parseInt(sf)); sb.append(dt.getName() + ","); } } else { District dt = districtMapper.selectByPrimaryKey(Integer.parseInt(dis)); sb.append(dt.getName()); } } pram.put("区域", sb); pram.put("签约到期日", reseller.getContractDate()); pram.put("客户类型(经销商0、一般客户1)", reseller.getType()); arrayList.add(pram); } if (arrayList.size() > 0) {//装填完毕后,进入该方法 result=exportListData(arrayList,request); } else { result.setResultCode("-1"); result.setResultMsg("暂无数据"); return result; } } return result; } catch (Exception e) { e.printStackTrace(); result.setResultCode("-1"); result.setResultMsg("异常"); return result; } }
/**** * 公用导出列表数据 * @param list 列表 */ protected ResultBean exportListData(List<Map<String, Object>> list,HttpServletRequest request) { ResultBean result=new ResultBean(); Set<String> keySet = list.get(0).keySet();//获取所有的key集合 String[] strArr = new String[keySet.size()];//转成数组 String[] array = keySet.toArray(strArr); String filePath = request.getSession().getServletContext() .getRealPath("/") + "upload/"; String fileName = UUID.randomUUID().toString().replaceAll("-", "") + ".xls"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String date = sdf.format(new Date()); File f = new File(filePath.toString()); if (!f.exists()) {// 如果目标文件所在的目录不存在,则创建父目录 f.mkdirs(); } f = new File(filePath+fileName); OutputStream out = null;//创建流 try { out = new FileOutputStream(f); ImportExcel.exportExcel(array, list, out); out.close(); result.setResultMsg("成功"); result.setResult("/upload/"+fileName); result.setResultCode("0"); return result; } catch (Exception e) { result.setResultMsg("文件导出失败"); result.setResultCode("0"); return result; } }
/** * 利用JAVA的反射机制,将放置在JAVA集合中并且符号一定条件的数据以EXCEL 的形式输出到指定IO设备上<br> * 用于单个sheet * * @param <T> * @param headers 表格属性列名数组 * @param dataset 需要显示的数据集合,集合中一定要放置符合javabean风格的类的对象。此方法支持的 * javabean属性的数据类型有基本数据类型及String,Date,String[],Double[] * @param out 与输出设备关联的流对象,可以将EXCEL文档导出到本地文件或者网络中 */ public static <T> void exportExcel(String[] headers, Collection<T> dataset, OutputStream out) { exportExcel(headers, dataset, out, null); } /** * 利用JAVA的反射机制,将放置在JAVA集合中并且符号一定条件的数据以EXCEL 的形式输出到指定IO设备上<br> * 用于单个sheet * * @param <T> * @param headers 表格属性列名数组 * @param dataset 需要显示的数据集合,集合中一定要放置符合javabean风格的类的对象。此方法支持的 * javabean属性的数据类型有基本数据类型及String,Date,String[],Double[] * @param out 与输出设备关联的流对象,可以将EXCEL文档导出到本地文件或者网络中 * @param pattern 如果有时间数据,设定输出格式。默认为"yyy-MM-dd" */ public static <T> void exportExcel(String[] headers, Collection<T> dataset, OutputStream out, String pattern) { // 声明一个工作薄 HSSFWorkbook workbook = new HSSFWorkbook(); // 生成一个表格 HSSFSheet sheet = workbook.createSheet(); write2Sheet(sheet, headers, dataset, pattern); try { workbook.write(out); } catch (IOException e) { e.printStackTrace(); } } /** * 每个sheet的写入 * * @param sheet 页签 * @param headers 表头 * @param dataset 数据集合 * @param pattern 日期格式 */ private static <T> void write2Sheet(HSSFSheet sheet, String[] headers, Collection<T> dataset, String pattern) { // 产生表格标题行 HSSFRow row = sheet.createRow(0); for (int i = 0; i < headers.length; i++) { HSSFCell cell = row.createCell(i); HSSFRichTextString text = new HSSFRichTextString(headers[i]); cell.setCellValue(text); } // 遍历集合数据,产生数据行 Iterator<T> it = dataset.iterator(); int index = 0; while (it.hasNext()) { index++; row = sheet.createRow(index); T t = (T) it.next(); try { if (t instanceof Map) { @SuppressWarnings("unchecked") Map<String, Object> map = (Map<String, Object>) t; int cellNum = 0; for (String k : headers) { if (map.containsKey(k) == false) {//map中不存在key continue; } Object value = map.get(k); HSSFCell cell = row.createCell(cellNum); cell.setCellValue(String.valueOf(value)); cellNum++; } } } catch (Exception e) { e.printStackTrace(); } } // 设定自动宽度 for (int i = 0; i < headers.length; i++) { sheet.autoSizeColumn(i); } }保存代码,留着以后可能会用到;