public class ExcelUtil {
public static boolean createExcel(HttpServletResponse response, Map map) {
WritableWorkbook wbook = null;
WritableSheet sheet = null;
OutputStream os = null;
try {
response.reset();
String fileName="客户资料"+TimeUtil.getNowDayTimeShortStr();
//生成文件名
response.setHeader("Content-disposition", "attachment; filename="
+ new String(fileName.getBytes("GB2312"), "ISO8859-1")
+ ".xls");
response.setContentType("application/msexcel");
os = response.getOutputStream();
wbook = Workbook.createWorkbook(os);
sheet = wbook.createSheet("信息", 0);
int row = 0;
//填写表头
setSheetTitle(sheet, row);
//遍历map,填充数据
setSheetData(sheet, map, row);
wbook.write();
os.flush();
} catch (Exception e) {
//自己处理
e.printStackTrace();
}finally {
try {//切记,此处一定要关闭流,否则你会下载一个空文件
if (wbook != null)
wbook.close();
if (os != null)
os.close();
} catch (IOException e) {
e.printStackTrace();
} catch (WriteException e) {
e.printStackTrace();
}
}
return false;
}
private static void setSheetTitle(WritableSheet sheet, int row)
throws RowsExceededException, WriteException {
// 设置excel标题格式
WritableFont wfont = new WritableFont(WritableFont.ARIAL, 12,
WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE,
Colour.BLACK);
WritableCellFormat wcfFC = new WritableCellFormat(wfont);
//设置每一列宽度
sheet.setColumnView(0,13);
sheet.setColumnView(1,20);
sheet.setColumnView(2,13);
sheet.setColumnView(3,13);
sheet.setColumnView(4,13);
//填写第一行提示信息
sheet.addCell(new Label(0, row, "登录方式", wcfFC));
sheet.addCell(new Label(1, row, "帐号", wcfFC));
sheet.addCell(new Label(2, row, "次数", wcfFC));
sheet.addCell(new Label(3, row, "最近日期", wcfFC));
sheet.addCell(new Label(4, row, "最近时间", wcfFC));
}
private static void setSheetData(WritableSheet sheet, Map map, int row)
throws RowsExceededException, WriteException {
WritableFont wfont = new WritableFont(WritableFont.ARIAL, 10,
WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE,
Colour.RED);
WritableCellFormat wcfFC = new WritableCellFormat(wfont);
//从map中获取数据
List<Terminal> terminalList = (List<Terminal>) map.get("terminalList");
if(terminalList.size()==0){
row++;
sheet.mergeCells(0, 1, 4, 1);
sheet.addCell(new Label(0, row, "暂无相关数据...",wcfFC));
}else{
//遍历并填充
for (Terminal terminal : terminalList) {
row++;
sheet.addCell(new Label(0, row, terminal.getType()));
sheet.addCell(new Label(1, row, terminal.getName()));
sheet.addCell(new Label(2, row, ""+terminal.getLogin_count()));
sheet.addCell(new Label(3, row, terminal.getDate()));
sheet.addCell(new Label(4, row, terminal.getHour()));
}
}
}
}