导出excel模板,由Jxls技术换为POI,以及解决POI与Jxls的jar包冲突问题

项目里有一个功能,是将数据库查询出的数据全部导出为excel报表,由于数据复杂,使用的是jxls模板,就是这样:


jxls代码是这样的:

//      获得输出的响应
	HttpServletResponse response = this.getResponse();
	HSSFWorkbook workbook = JxlsManager.getWorkBookByTemplate(
		"template.xls", dataList, "dataVo");
	JxlsManager.exportExcel(workbook, response, "导出数据清单");

JxlsManager为自己写的工具类,此处用到的方法内容如下

//从一个Excel模板中得到一个WORKBOOK
	public static HSSFWorkbook getWorkBookByTemplate(String templateFileName,
			Object exportObj, String objectName) throws Exception {
		//获取Excel模板的全路径(此处根据实际情况替换为拼成路径的方法)
		templateFileName = new JxlsManager().getPath()+templateFileName;
		templateFileName = "/" + templateFileName;
		Map beans = new HashMap();
		beans.put(objectName, exportObj);
		XLSTransformer transformer = new XLSTransformer();
		InputStream is = new BufferedInputStream(new FileInputStream(
				templateFileName));
		HSSFWorkbook workbook = transformer.transformXLS(is, beans);
		return workbook;

	}
//此方法用来将workbook输出到页面上,提供给用户下载
        public static void exportExcel(HSSFWorkbook workBook, HttpServletResponse response, String excelName) throws Exception {
		//输出文件的格式
		response.setContentType("application/vnd.ms-excel");
		OutputStream os = response.getOutputStream();
		//处理名字为中文的问题
		excelName = new String(excelName.getBytes("GB18030"),"ISO8859-1");
		//设置导出文件的名字
		response.addHeader("Content-Disposition", "attachment; filename=\""+excelName+".xls\"");   
		workBook.write(os);
		os.flush();
		os.close();
	}

Jxls可以非常灵活地读取Excel模板的EL表达式,所以非常方便,但是速度很慢,所以作者接到了这个需求,将Jxls技术换成效率很高的POI。

那么问题来了&#

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值