jexl 报表导出技术

一 .使用场景

工作中使用

httpservletrespose respose 请求头的编辑

String realPath = req.getSession().getServletContext().getRealPath("/WEB-INF/pages/order/");
response.reset();
response.setContentType("application/vnd.ms-excel;charset=utf-8");
response.setHeader("Content-Disposition", "attachment;filename="+ new String(("simulationSort.xlsx").getBytes(), "iso-8859-1"));

 直接上代码

/**	 * 根据模板生成Excel文件.	 
      * @param templateFileName 模板文件.	 
      * @param list 模板中存放的数据.
      * @param kouflist 动态部分数据
      * @param response.	 
     */	
	public void createExcel(String templateFileName, List<?> list,List<Map<String, String>> kouflist,HttpServletResponse response) {
		InputStream in=null;  
        OutputStream out=null;  
		// 创建XLSTransformer对象
		XLSTransformer transformer = new XLSTransformer();
		
		File f = new File(templateFileName+"/simulationSortjxls.xlsx");
		String string = f.toString();
		// 获取java项目编译后根路径
		
		Map<String, Object> beanParams = new HashMap<String, Object>();
		beanParams.put("list", list);
		try {
			 in=new BufferedInputStream(new FileInputStream(string)); 
			// 生成Excel文件  模板的静态部分已经完成
			Workbook workbook = transformer.transformXLS(in, beanParams);
			//设置表格的样式
			CellStyle cellStyle = workbook.createCellStyle();
			cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
			cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
			cellStyle.setWrapText(true);
			//设置字体的样式
			 Font cellFont = workbook.createFont();
		     cellFont.setFontName("宋体");
		     cellFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
		     cellStyle.setFont(cellFont);
		     //获取表格的第一个sheet
			Sheet sheet = workbook.getSheetAt(0);
			//获取静态部分占啦多少行
			int num = sheet.getLastRowNum();
			// kouflist 是动态数据的行数信息
			for (int i = 0; i < kouflist.size(); i++) {
				//获取到sheet 中的第i行 kouflist.get(i)
				for (int j = 0; j <kouflist.get(i).size(); j++) {
					//获取到sheet 中的第i行 kouflist.get(i)中 第j列,应动态展示 该列没有,需要创建
					Cell createCell = sheet.getRow(i+3).createCell(17+j);
					//设置第几行中的第几列的样式
					createCell.setCellStyle(cellStyle);
					//给第几行中的第几列赋值
					createCell.setCellValue(kouflist.get(i).get("v"+j));
					
				}
				
			}
			//获取流
			 out=response.getOutputStream();
			 //写入 流
			 workbook.write(out);
			 //刷新
	          out.flush(); 
		} catch (Exception e) {
			e.printStackTrace();
		} finally {  
            if (in!=null){try {in.close();} catch (IOException e) {}}  
            if (out!=null){try {out.close();} catch (IOException e) {}}  
        }  
	}

未完待续......

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值