使用SXSSFWorkbook对象 在入参里设置多少条数据会写回硬盘。减少内存的占用!
public Object createInferCard(HttpServletRequest request,HttpServletResponse response,String staffName,String index,String yq,String page,String rows,String strTime,String endTime,String keyword,String state) throws Exception{
Object[ ] params =new Object[]{ };
PageObject pg = outpatiantLogService.findOutPatinantExcel(params,index,1,20,strTime,endTime,keyword,yq,state);
List list = (List) pg.getRows();
// 创建HSSFWorkbook对象(excel的文档对象)
SXSSFWorkbook wb = new SXSSFWorkbook(3000);
CellStyle style=wb.createCellStyle();
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
// 建立新的sheet对象(excel的表单)
Sheet sheet = wb.createSheet("统计报告");
// 在sheet里创建第一行,参数为行索引(excel的行),可以是0~65535之间的任何一个
Row row = sheet.createRow(0);
if(list==null||list.size()<=0){
return null;
}
Map map = (Map)list.get(0);
Iterator<Map.Entry<Integer, String>> it = map.entrySet().iterator();
List<Object> listHead = new ArrayList<Object>();
while (it.hasNext()) {
Map.Entry<Integer, String> entry = it.next();
listHead.add(entry.getKey());
}
for (int i = 0; i < listHead.size(); i++) {
row.createCell(i).setCellValue((String)listHead.get(i));
}
for (int i = 0; i < list.size(); i++) {
Row rowAll = sheet.createRow(i+1);
Map mapAll = (Map)list.get(i);
Iterator<Map.Entry<Integer, String>> itAll = mapAll.entrySet().iterator();
List<Object> listAll = new ArrayList<Object>();
while (itAll.hasNext()) {
Map.Entry<Integer, String> entry = itAll.next();
listAll.add(entry.getValue());
}
for (int j = 0; j < map.size(); j++) {
rowAll.createCell(j).setCellValue((listAll.get(j))!=null?listAll.get(j).toString():"");
}
}
// 输出Excel文件
OutputStream output = response.getOutputStream();
response.reset();
response.setHeader("Content-disposition", "attachment; filename="+ToStringUTF8.toUtf8String("data"+GetDate.getDateDay2()+".xls"));
response.setContentType("application/msexcel");
wb.write(output);
output.close();
return null;
}