项目里有一个功能,是将数据库查询出的数据全部导出为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。
那么问题来了&#