Java POI导出Excel

这个也没啥好说的,主要是注意数据格式,excel表的样式根据需求而定,

下载的是xlsx格式的,03版本的代码基本都差不多,下面是查询出来的数据,List<Map<String,Object>>


[{'age':0,'busiState':'04','crtTime':'2017-10-26 16:09:28.0','current':0,'custName':'张朋','custNo':'C2017091182510','hasAmazon':false,'hasEbay':false,'hasJingdong':false,'hasTaobao':false,'hasTianmao':true,'idNo':'360681198811016815','limitapplicationId':'LM20171026635920','mobile':'13917186473','pageSize':0,'platType':'03','processId':'1f983d2798f54050941be4a9ff1f633a','reApproveTime':'2017-10-26 16:20','shopCount':0},{'age':0,'busiState':'04','crtTime':'2017-09-21 14:39:39.0','current':0,'custName':'张朋','custNo':'C2017091182510','hasAmazon':false,'hasEbay':false,'hasJingdong':false,'hasTaobao':false,'hasTianmao':true,'idNo':'360681198811016815','limitapplicationId':'LM20170921492254','mobile':'13917186473','pageSize':0,'platType':'03','processId':'a7678889ed2d4a2a83625f1008851e79','reApproveTime':'2017-09-21 14:43','shopCount':0},{'age':0,'busiState':'04','crtTime':'2017-09-20 11:50:16.0','current':0,'custName':'张朋','custNo':'C2017091182510','hasAmazon':true,'hasEbay':false,'hasJingdong':false,'hasTaobao':false,'hasTianmao':false,'idNo':'360681198811016815','limitapplicationId':'LM20170912445361','mobile':'13917186473','pageSize':0,'platType':'01','processId':'2916174e2de74eb58a14d8c5867dde1e','reApproveTime':'2017-09-12 15:12','shopCount':0}]


/**
	 * 导出历史查询结果
	 * @param queryResultData
	 * @param req
	 * @param res
	 */
	@RequestMapping(value = "/report/exportQueryResult", method = RequestMethod.POST)
	public void exportQueryResult(String queryResultData,HttpServletRequest req,HttpServletResponse res){
		if(StringUtil.isEmpty(queryResultData)){
			throw new CommonException("没有可导出的数据!");
		}
		queryResultData = queryResultData.replace("'", "\"");
		JSONArray jsonArray =  JSONArray.parseArray(queryResultData);
		Object[] objList = jsonArray.toArray();
		
		List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
		for (Object object : objList) {
			Map<String,Object> map = null;
			if(object instanceof Map){
				map = (Map<String,Object>)object;
				list.add(map);
			}else{
				throw new CommonException("数据格式错误!");
			}
		}
		
		String[] headers = { "进件编号", "用户编号", "姓名", "手机", "身份证号","申请时间","状态"};
		String fileName = "历史查询结果.xlsx";
		fileName = getCodedFileName(fileName);
		res.reset();
		res.setContentType("application/x-msdownload");
		res.setHeader("Content-Disposition","attachment; filename=" + fileName);
		OutputStream out;
		try {
			out = res.getOutputStream();
			createExcel("历史查询结果", headers,list,out);
			out.flush();
			out.close();
		} catch (IOException e) {
			throw new CommonException("导出查询结果异常!"+e.toString());
		}
	}
	
	/**
	 * 创建excel文件
	 * @param sheetName
	 * @param headers
	 * @param listData
	 * @param out
	 * @throws IOException
	 */
	private void createExcel(String sheetName, String[] headers,List<Map<String,Object>> listData,OutputStream out) throws IOException{
		if(listData != null && listData.size()>0){
			// 声明一个工作薄
			XSSFWorkbook workbook = new XSSFWorkbook();
			// 生成一个表格
			XSSFSheet sheet = workbook.createSheet(sheetName);
			// 设置表格默认列宽度为15个字节
			sheet.setDefaultColumnWidth((short) 20);
			// 生成表头样式
			XSSFCellStyle headerStyle = workbook.createCellStyle();
			// 设置这些样式
			headerStyle.setFillForegroundColor(HSSFColor.LAVENDER.index);
			headerStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
			headerStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
			headerStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
			headerStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
			headerStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
			headerStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
			// 生成一个字体
			XSSFFont font = workbook.createFont();
			font.setFontHeightInPoints((short) 12);
			font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
			// 把字体应用到当前的样式
			headerStyle.setFont(font);
			
			//产生表格标题行
			XSSFRow row = sheet.createRow(0);
			for (short i = 0; i < headers.length; i++) {
				XSSFCell cell = row.createCell(i);
				cell.setCellStyle(headerStyle);
				XSSFRichTextString text = new XSSFRichTextString(headers[i]);
				cell.setCellValue(text);
			}
			
			// 生成并设置 数据展示样式 
			XSSFCellStyle dataStyle = workbook.createCellStyle();
			dataStyle.setFillForegroundColor(HSSFColor.WHITE.index);
			dataStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
			dataStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
			dataStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
			dataStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
			dataStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
			dataStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
			dataStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
			//设置单元格格式为文本格式
			XSSFDataFormat xssfDataFormat = workbook.createDataFormat();
			dataStyle.setDataFormat(xssfDataFormat.getFormat("@"));
			
			// 生成另一个字体
			XSSFFont font2 = workbook.createFont();
			font2.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
			// 把字体应用到当前的样式
			dataStyle.setFont(font2);
			
			for (int i = 0; i < listData.size(); i++) {
				row = sheet.createRow(i+1);//从第二行开始
				Map<String, Object> rowData = listData.get(i);
				int cellIndex = 0;
				cellIndex = createCell(cellIndex, row, dataStyle, rowData, "limitapplicationId");//进件编号
				cellIndex = createCell(cellIndex, row, dataStyle, rowData, "custNo");//用户编号
				cellIndex = createCell(cellIndex, row, dataStyle, rowData, "custName");//姓名
				cellIndex = createCell(cellIndex, row, dataStyle, rowData, "mobile");//手机
				cellIndex = createCell(cellIndex, row, dataStyle, rowData, "idNo");//身份证号
				cellIndex = createCell(cellIndex, row, dataStyle, rowData, "crtTime");//申请时间
				createCell(cellIndex, row, dataStyle, rowData, "busiState");//状态
			}
			workbook.write(out);
		}
	}
	
	/**
	 * 创建单元格,并且写入数据
	 * @param cellIndex
	 * @param row
	 * @param dataStyle
	 * @param rowData
	 * @param columnId
	 * @return
	 */
	private int createCell(int cellIndex,XSSFRow row,XSSFCellStyle dataStyle,Map<String, Object> rowData,String columnId){
		XSSFCell cell = row.createCell(cellIndex);
		cell.setCellStyle(dataStyle);
		Object obj = rowData.get(columnId);
		if(obj == null){
			cell.setCellValue("");
		}else if(columnId.equals("crtTime")){
			String crtTime = obj.toString();
			crtTime = crtTime.substring(0, crtTime.length()-2);//格式化日期,去掉最后的  .0
			cell.setCellValue(crtTime);
		}else if(columnId.equals("busiState")){
			if(obj.equals(ReportConstants.BUSI_STATE_01)){//自己定义的常量,01到05
				cell.setCellValue("待审核");
			}else if(obj.equals(ReportConstants.BUSI_STATE_02)){
				cell.setCellValue("已审核");
			}else if(obj.equals(ReportConstants.BUSI_STATE_03)){
				cell.setCellValue("已放款");
			}else if(obj.equals(ReportConstants.BUSI_STATE_04)){
				cell.setCellValue("已放弃");
			}else if(obj.equals(ReportConstants.BUSI_STATE_05)){
				cell.setCellValue("拒贷");
			}
		}else{
			cell.setCellValue(obj.toString());
		}
		cellIndex++;
		return cellIndex;
	}
	
	private boolean isGBK(String entryName) {
		try {
			return java.nio.charset.Charset.forName("GBK").newEncoder().canEncode(entryName);
		} catch (Exception e) {
			return false;
		}
	}
	
	public String getCodedFileName(String fileName){
		String zipFileName = fileName;
		try {
			if (isGBK(fileName)) {
				zipFileName = new String(fileName.getBytes("GBK"), "iso-8859-1");
			} else {
				zipFileName = URLEncoder.encode(fileName, "UTF-8");
			}
		} catch (UnsupportedEncodingException e) {
			return fileName;
		}
		return zipFileName;
	}

最后导出的效果


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值