用到过的导出excel模块简单记录一下:
1)前台点击导出数据按钮,跳转到action 处理
<input type="button" name="exportAll" value="导出全部数据" style="color: red;" class="submit" οnclick="export_data('exportAll')" />
点击事件调用js 实现在js中跳转
function export_data(str) {
//过滤课程名和讲师姓名的非法字符串
if (stringFilter($("#courseName").val(), 20)
&& stringFilter($("#teacherName").val(), 20)) {
//表单提交
$("#innerstatisticForm").attr("action",
"downloadExcel.action?category=" + str);
$("#innerstatisticForm").submit();
}
}
2)action从数据库中取得要导出的数据:
public String downloadExcel(){
//log.info(category);
//设置下载文件的文件名,并修改编码格式
fileName = transferFileName();
//声明一个工作薄对象
XSSFWorkbook wb = null;
//log.info(condition.getTeacherName());
//根据生产Excel文件的策略确定导出查询结果或者导出全部信息
try {
if("exportResult".equals(category)) {
//根据查询条件导出查询结果
wb = innerTrainingStatisticService.exportResutl(condition); //调用服务层的方法 返回wb
} else {
//导出全部信息
wb = innerTrainingStatisticService.exportAll();
}
} catch (DaoException e) {
contextPvd.setRequestAttr("errMsg", "系统异常,请稍后重试!");
e.printStackTrace();
return ERROR;
}
//log.info(wb.getSheetAt(0).getPhysicalNumberOfRows());
//定义字节输出流对象
ByteArrayOutputStream output = new ByteArrayOutputStream();
//声明输入流
InputStream is = null;
try {
//将工作薄写到输出流中
wb.write(output);
//初始化输入流
is = new ByteArrayInputStream(output.toByteArray());
} catch (IOException e) {
contextPvd.setRequestAttr("errMsg", "系统异常,请稍后重试!");
e.printStackTrace();
return ERROR;
}
//设置页面的输入流,用来生产文件
this.setExcelStream(is);
return SUCCESS;
}
/**
* 修改文件名的编码方式 防止下载的文件名中文乱码
* @return
*/
public String transferFileName(){
String downFileName = DateStringUtil.Date2String(new Date(), "yyyy-MM-dd") + "内训课程统计信息.xlsx";
String agent = contextPvd.getRequestBrowser();
try {
if (null != agent && agent.indexOf("MSIE") != -1) {// ie
downFileName = java.net.URLEncoder.encode(downFileName, "UTF-8");
}else {// firefox
downFileName = new String(downFileName.getBytes("UTF-8"), "ISO8859-1");
}
} catch (UnsupportedEncodingException e) {
//e.printStackTrace();
downFileName="unknow.xlsx";
}
return downFileName;
}
3)service层用到的方法(返回表格对象 XSSFWorkbook wb )
public XSSFWorkbook exportResutl(InnerTrainingStatisticCondition condition)
throws DaoException {
//根据查询条件获得内训课程信息
List<InnerTrainingStatisticBean> statisticlist = innerTrainingStatisticDao.findByCondition(condition);
return export(statisticlist);
}
private XSSFWorkbook export(List<InnerTrainingStatisticBean> statisticlist) throws DaoException {
//声明并初始化二维数组,用于存储内训课程信息
ArrayList<ArrayList<String>> list = new ArrayList<ArrayList<String>>();
//声明并初始化一个一维数组,用于存储一条内训课程信息
ArrayList<String> rowlist = new ArrayList<String>();
//添加标题行信息
rowlist.add("课程名");
rowlist.add("培训类型");
rowlist.add("培训讲师");
rowlist.add("讲师职位");
rowlist.add("计划时间");
rowlist.add("执行时间");
rowlist.add("报名人数");
rowlist.add("签到人数");
rowlist.add("讲师能力得分");
rowlist.add("课堂氛围得分");
rowlist.add("培训内容得分");
rowlist.add("提高学员能力得分");
rowlist.add("总体评价");
list.add(rowlist);
//循环遍历内训课程信息,存入二维数组
for(InnerTrainingStatisticBean bean : statisticlist){
rowlist = new ArrayList<String>();
rowlist.add(bean.getCourseName());
rowlist.add(bean.getCategoryName());
rowlist.add(bean.getTeacherName());
rowlist.add(bean.getPositionName());
rowlist.add(bean.getExpectedTime());
rowlist.add(bean.getActualTime());
rowlist.add(String.valueOf(bean.getSignupAmount()));
rowlist.add(String.valueOf(bean.getAttendAmount()));
rowlist.add(String.valueOf(bean.getExpressAbility()));
rowlist.add(String.valueOf(bean.getAtmosphere()));
rowlist.add(String.valueOf(bean.getContent()));
rowlist.add(String.valueOf(bean.getAbilityimproved()));
rowlist.add(String.valueOf(bean.getOverallEvaluation()));
list.add(rowlist);
}
return excelUtil.writeExcel(list);//调用excel工具类中的方法 该工具类在上一文章中提到(利用poi读写excel)
}