spring-mvc4-导出日志excell

今天整合项目,把struts2+hibernate3换成spring4.2.9 hibernate4.3.11final

整合后原来的导出日志功能不能用了,然后重新百度了大半天,终于解决了。

百度上也是有比较多的办法,但是由于原来项目使用的是流,要是用spring自动的@responseEntity这个东东,还要转byte[ ],效率太低了

或者是有写用文件流的,我这个菜鸟觉得太麻烦了。

直接上代码:

##前端Js:(html5上面看了就一个div)

/*至于前端要怎么触发随便啦*/

function download(){

var url = '../log/exportLog.do?state=' + state;

//index.html定义过此id
document.getElementById('file_download').src = url;

}


##控制层

@Controller
@RequestMapping("/log")
public class LogManageController{

/**
* 导出日志数据
* @return
*/
@RequestMapping("/exportLog.do")
public void exportLog(
String state){

state = (state == null) ? "" : URLDecoder.decode(state, "UTF-8");//万能解码一下,不会出现乱码(真实项目中用,这里忽略用途)

/*先来弄个文件名*/

DateFormat format = new SimpleDateFormat("yyyyMMddhhmmss");
StringBuilder str = new StringBuilder("系统日志");
str.append("_"+format.format(new Date())+".xlsx");
String downShowName = str.toString();

try{

InputStream is = logManage.exportLog(参数);//该方法是用来获取文件内容的流

response.setContentType("application/vnd.ms-excel;charset=ISO8859-1");//编码,文件类型

response.setHeader("Content-Disposition", "attachment; filename=" + downShowName);//设置文件名

response.setContentLength(is.available());//获取长度

FileCopyUtils.copy(is, response.getOutputStream());//复制(猜的)

}catch(Exception e){

//处理异常

}
}

}

到这里就好了。当然还是附上生成excell的代码:

这里用的是poi ,去查api之类的太麻烦了,直接copy过来改改把。

serviceImpl:(实现类,接口省略)

@Override
@Transactional(readOnly = true)
public InputStream exportLog(参数){

/*这里去数据库查记录…结果放在一个List<Log>集合里面,集合元素是Log的JavaBean对象*/

/*查完了开始生成文件内容*/

try{

XSSFWorkbook wb = new XSSFWorkbook();

XSSFSheet sheet = wb.createSheet("这里是要生成的sheet的名字");//就是下面这个


/*下面根据个人的项目中,日志内容编辑,需要自行调整!!!*/

sheet.createFreezePane(0, 1, 0, 1);  //冻结首行
XSSFCellStyle cs = wb.createCellStyle();   //定义时间样式
POIUtil.setDataFormatForDate(wb, cs);
XSSFCellStyle cs0 = wb.createCellStyle();  //定义首行样式
POIUtil.setFont(wb, cs0);
Row row0 = sheet.createRow(0);
Cell c00 = row0.createCell(0);c00.setCellStyle(cs0);c00.setCellValue("级别 ");
Cell c01 = row0.createCell(1);c01.setCellStyle(cs0);c01.setCellValue("操作时间 ");
Cell c02 = row0.createCell(2);c02.setCellStyle(cs0);c02.setCellValue("操作模块");
Cell c03 = row0.createCell(3);c03.setCellStyle(cs0);c03.setCellValue("操作名称 ");
Cell c04 = row0.createCell(4);c04.setCellStyle(cs0);c04.setCellValue("操作描述");
Cell c05 = row0.createCell(5);c05.setCellStyle(cs0);c05.setCellValue("用户名");
Cell c06 = row0.createCell(6);c06.setCellStyle(cs0);c06.setCellValue("IP");
Cell c07 = row0.createCell(7);c07.setCellStyle(cs0);c07.setCellValue(" 操作数据 ");


sheet.setColumnWidth(0, 2000);
sheet.setColumnWidth(1, 5500);
sheet.setColumnWidth(2, 5000);
sheet.setColumnWidth(3, 5000);
sheet.setColumnWidth(4, 10000);
sheet.setColumnWidth(5, 3000);
sheet.setColumnWidth(6, 4500);
sheet.setColumnWidth(7, 10000);
int n=list.size();
for(int i=0; i<n; i++) {
Row row = sheet.createRow(i+1);
Log log = list.get(i);
row.createCell(0).setCellValue(StringEscapeUtil.decode(log.getState()));  
Cell cell1 = row.createCell(1);
cell1.setCellStyle(cs);  //设置样式
cell1.setCellValue(log.getTime());
row.createCell(2).setCellValue(StringEscapeUtil.decode(log.getModule()));
row.createCell(3).setCellValue(StringEscapeUtil.decode(log.getAction()));
row.createCell(4).setCellValue(StringEscapeUtil.decode(log.getDescribe()));
row.createCell(5).setCellValue(StringEscapeUtil.decode(log.getUsername()));
row.createCell(6).setCellValue(StringEscapeUtil.decode(log.getIp()));
row.createCell(7).setCellValue(StringEscapeUtil.decode(log.getData()));
}

ByteArrayOutputStream os =  new ByteArrayOutputStream();
wb.write(os);
os.flush();
byte [] bb = os.toByteArray();
return new ByteArrayInputStream(bb,0,bb.length);

}catch (Exception e) {
throw new RuntimeException(e.toString());
}

}

###到此就结束了


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值