一、获取输出流创建excel文件
OutputStream os = response.getOutputStream();// 取得输出流
response.reset();// 清空输出流
WritableWorkbook wbook = Workbook.createWorkbook(os); // 建立excel文件
二、设置文件名称、定义输出类型
response.setHeader("Content-disposition", "attachment; filename="+new String(xlsName.getBytes("gbk"), "iso8859-1")+".xls");// 设定输出文件头
response.setContentType("application/msexcel");// 定义输出类型
WritableSheet wsheet = wbook.createSheet("汇总表", 0); // sheet名称
三、设置单元格的默认宽度
wsheet.getSettings().setDefaultColumnWidth(15);
四、获取内容数据
HashMap<String,Object> datamap=(HashMap<String, Object>) resultMap.get("data");//除表格第一行(列头)和第一列(行头)外的数据
List<Map<String,Object>> lj = (List<Map<String,Object>>)resultMap.get("lj");//每一行的头
List<Map<String,Object>> pl = (List<Map<String,Object>>)resultMap.get("pl");//每一列的头
String rqString = (String) resultMap.get("rq");
String dw = (String) resultMap.get("dw");
五、设置excel(内容)标题
//设置标题的字体样式和颜色
WritableFont wfont = new WritableFont(WritableFont.ARIAL, 16,WritableFont.NO_BOLD,false,UnderlineStyle.NO_UNDERLINE,Colour.BLACK);
WritableCellFormat wcfFC = new WritableCellFormat(wfont);
//设置标题的位置(居中)
wcfFC.setAlignment(Alignment.CENTRE);
//从(0,0)开始合并pl长度个单元格
wsheet.mergeCells(0, 0, pl.size(), 0);
//把标题按定义的样式加入表格
wsheet.addCell(new Label(0, 0, tmptitle, wcfFC));
//1.生成固定标识
WritableCellFormat wcfFC3 = new WritableCellFormat();
wcfFC3.setBorder(Border.ALL, BorderLineStyle.THIN);//设置单元格边框All全边框,THIN实线
wsheet.addCell(new Label(0, 2, "XX\\品类",wcfFC3));
//循环表头
for(int i=0;i < pl.size();i++){
wsheet.addCell(new Label(i+1, 2, pl.get(i).get("JC").toString(),wcfFC3));
}
//2.生成左侧除第一行外的第一列
for (int i = 0; i < lj.size(); i++) {
wsheet.addCell(new Label(0, i+3, lj.get(i).get("JC").toString(),wcfFC3));
}
for (int i = 0; i < pl.size(); i++) {
for (int j = 0; j < lj.size(); j++) {
String pldm = (String) pl.get(i).get("DM");
String ljdm = (String) lj.get(j).get("DM");
String key = ljdm+pldm+"CS";
wsheet.addCell(new Label(i+1, j+3, datamap.get(key)== null?"0":datamap.get(key).toString(),wcfFC3));
}
}
wsheet.mergeCells(0, lj.size()+3, pl.size(), lj.size()+3);
wsheet.addCell(new Label(0, lj.size()+3, dw));
// 主体内容生成结束
wbook.write(); // 写入文件
wbook.close();
os.close(); // 关闭流
=====================================================================
方法详情查看文档
=====================================================================
其他相关文章可参考:
http://zhouhaitao.iteye.com/blog/1842769