java导出列表--项目分析

	/**导出信息**/
	@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);
   }
}
保存代码,留着以后可能会用到;

猜你喜欢

转载自blog.csdn.net/lujunwei0205/article/details/80223209
今日推荐