java代码导出excel
Control.java
@SuppressWarnings("deprecation") @RequestMapping(value = "ddosAttackReport_Download.do") public void Download(HttpServletRequest request,HttpServletResponse response,PagedRequest pagedRequest ,String ids ,Long corpid ,Long task ){ //先将数据查询出来 Map<String,Object> params = new HashMap<>(); params.put("task", task); if (Validators.isNotnull(getCustomContext(request))) { if(Validators.isNull(task)){ if(Validators.isNotnull(getCustomContext(request).getCorp())){ corpid = getCustomContext(request).getCorp().getCorpid(); } } params.put("corpid", corpid); } else { params.put("corpid", corpid); } if(Validators.isNotnull(task) && task == 1L){ Map<String, Date> previousMondayToSunday = DateUtils.getPreviousMondayToSunday(); Date beginTime = previousMondayToSunday.get("monday"); Date endTime = previousMondayToSunday.get("sunday"); params.put("begintime", beginTime); params.put("endtime", endTime); } else { task = null; Date begintime = DateUtils.str2Date(request.getParameter("begintime"),DateUtils.datetimeFormat); params.put("begintime", begintime); Date endtime = DateUtils.str2Date(request.getParameter("endtime"),DateUtils.datetimeFormat); params.put("endtime", endtime); params.put("attacktype", request.getParameter("attacktype")); params.put("dstip", request.getParameter("dstip")); params.put("receivebits", request.getParameter("receivebits")); params.put("symbol", request.getParameter("symbol")); } List<Long> daeids = null; if(Validators.isNotnull(ids)){ daeids = new ArrayList<Long>(); String[] cids = ids.split(","); for (String id : cids) { if(id != null){ long l = Long.parseLong(id); daeids.add(l); } } } params.put("daeids", daeids); PagedResult<Map<String,Object>> pageResult = ddosAttackReportService.getDdosAttackReportDownload(pagedRequest, params); //创建HSSFWorkbook对象(excel的文档对象) HSSFWorkbook wb = new HSSFWorkbook(); //建立新的sheet对象(excel的表单) HSSFSheet sheet=wb.createSheet("详细攻击情况统计"); //设置值表头 设置表头居中 HSSFCellStyle style = wb.createCellStyle(); style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式 style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); //设置垂直对齐的样式为居中对齐; //在sheet里创建第一行,参数为行索引(excel的行),可以是0~65535之间的任何一个 HSSFRow row1=sheet.createRow(0); //创建单元格(excel的单元格,参数为列索引,可以是0~255之间的任何一个 HSSFCell cell=row1.createCell(0); //设置单元格内容 cell.setCellValue("详细攻击情况统计"); cell.setCellStyle(style); //合并单元格CellRangeAddress构造参数依次表示起始行,截至行,起始列, 截至列 sheet.addMergedRegion(new CellRangeAddress(0,0,0,8)); //在sheet里创建第二行 HSSFRow row2=sheet.createRow(1); //创建单元格并设置单元格内容 row2.createCell(0).setCellValue("受攻击ip"); row2.createCell(1).setCellValue("端口"); row2.createCell(2).setCellValue("攻击类型"); row2.createCell(3).setCellValue("开始时间"); row2.createCell(4).setCellValue("结束时间"); row2.createCell(5).setCellValue("持续时间"); row2.createCell(6).setCellValue("攻击类型(bits)"); row2.createCell(7).setCellValue("流量峰值"); row2.createCell(8).setCellValue("包峰值"); List<Map<String,Object>> datas = pageResult.getDataList(); if(Validators.isNotnull(datas) && datas.size() > 0) { for (int i = 0; i < datas.size(); i++) { Map<String, Object> data = (Map<String, Object>) datas.get(i); HSSFRow row=sheet.createRow(2); row.createCell(0).setCellValue(data.get("DSTIP")+""); row.createCell(1).setCellValue(data.get("PORT")+""); row.createCell(2).setCellValue(data.get("ATTACKTYPE")+""); row.createCell(3).setCellValue(data.get("BEGINTIME")+""); row.createCell(4).setCellValue(data.get("ENDTIME")+""); row.createCell(5).setCellValue(data.get("DURATION")+""); row.createCell(6).setCellValue(NumberHelper.getTransformUnitBits(Double.parseDouble(data.get("RECEIVEBITS").toString()))); row.createCell(7).setCellValue(NumberHelper.getTransformUnit(Double.parseDouble(data.get("DROPMAXBPS").toString()))); row.createCell(8).setCellValue(NumberHelper.getTransformUnitPps(Double.parseDouble(data.get("DROPMAXPPS").toString()))); } } //输出Excel文件 try { OutputStream output=response.getOutputStream(); response.reset(); response.setContentType("application/msexcel;charset=UTF-8"); response.addHeader("Content-Disposition", "attachment;filename=\"" + new String(("详细攻击情况统计" + ".xls").getBytes("GBK"), "ISO8859_1") + "\""); wb.write(output); output.flush(); output.close(); } catch (IOException e) { e.printStackTrace(); } //记录日志 String remoteIp = request.getRemoteAddr(); String username = ""; if(SessionCustom.getCustomContext(request).getCustom() != null) { username = SessionCustom.getCustomContext(request).getCustom().getCustomname(); } logService.addUserLog(new UserLog(username, remoteIp, "前台操作", "详细攻击情况统计_导出", new Date(), true,1L)); }
Service.java
public PagedResult<Map<String, Object>> getDdosAttackReportDownload( PagedRequest pagedRequest, Map<String, Object> params);
ServiceImpl.java
@SuppressWarnings({ "unchecked", "rawtypes" }) @Override public PagedResult<Map<String, Object>> getDdosAttackReportDownload( PagedRequest pagedRequest, Map<String, Object> params) { List list = ddosAttackReportMapper.getDdosAttackReportList(params); return BeanUtil.toPagedResult(list); }
dao.java
public List getDdosAttackReportDownload(Map<String, Object> params);
dao.xml
<!-- 获取扫描任务 --> <select id="getDdosAttackReportList" parameterType="Map" resultType="HashMap" useCache="false"> select dae.id daeid,dae.dst_ip dstip,dae.port port,dae.type attacktype,to_char(min(dae.begintime) , 'YYYY-MM-DD HH24:MI:SS') begintime,to_char(max(dae.endtime) , 'YYYY-MM-DD HH24:MI:SS') endtime,to_char(to_date('000000', 'HH24:MI:SS') + max(dae.duration) / 86400 , 'HH24:MI:SS') duration,max(dae.drop_bits) receivebits , max(dae.drop_max_bps) dropmaxbps,max(dae.drop_max_pps) dropmaxpps from ddos_attack_event dae left join corp_info ci on ci.corpid = dae.corpid where 1 = 1 <choose> <when test="task != null and task != '' and task == 1"> <if test="begintime != null"> and begintime >= #{begintime} </if> <if test="endtime != null"> and endtime <= #{endtime} </if> <if test="corpid != null and corpid!=''"> and ci.corpid = #{corpid} </if> </when> <otherwise> <if test="begintime != null"> and dae.begintime >= #{begintime} </if> <if test="endtime != null"> and dae.endtime <= #{endtime} </if> <if test="corpid != null and corpid!=''"> and ci.corpid = #{corpid} </if> <if test="attacktype != null and attacktype!=''"> and dae.type = #{attacktype} </if> <if test="dstip != null and dstip != ''"> and dae.dst_ip = #{dstip} </if> <if test="receivebits != null and receivebits!=''"> <choose> <when test="symbol == null or symbol == ''"> and dae.receive_bits >= #{receivebits} </when> <when test="symbol == 0"> and dae.receive_bits >= #{receivebits} </when> <when test="symbol == 1"> and dae.receive_bits <= #{receivebits} </when> <otherwise> and dae.receive_bits = #{receivebits} </otherwise> </choose> </if> </otherwise> </choose> group by dae.attack_event_id, dae.dst_ip,dae.port, dae.type, dae.id order by duration desc </select> <select id="getattackTypes" resultType="String" useCache="false"> select distinct (dae.type) as types from DDOS_ATTACK_EVENT dae </select>
页面按钮.jsp
<button type="button" class="btn btn-primary" onclick="Batch();" style="line-height:-10px;height: 25px;float:right;padding-top: 3px;/* background:#0E9AEF; */">导 出</button> //导出 function Batch() { var dstip = $("#dstip").val(); var begintime = $("#begintime").val(); var endtime = $("#endtime").val(); var attacktype = $('#attacktype').val(); var symbol = $('#symbol').val(); var receivebits = $('#receivebits').val(); var urlj = '&dstip='+dstip +'&begintime='+begintime +'&endtime='+endtime +'&attacktype='+attacktype +'&symbol='+symbol +'&receivebits='+receivebits; var url = path+'/front/flowclearing/ddosAttackReport/ddosAttackReport_Download.do?corpid=${corpid}&task=${task}'+urlj; window.location.href = url; }
设置excel样式.txt(需要的时候加)
// 第一步,创建一个webbook,对应一个Excel文件 HSSFWorkbook wb = new HSSFWorkbook(); // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet HSSFSheet sheet = wb.createSheet("搞笑"); // 第四步,创建单元格,并设置值表头 设置表头居中 HSSFCellStyle style = wb.createCellStyle(); style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式 style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); //设置垂直对齐的样式为居中对齐; //创建单元格(excel的单元格,参数为列索引,可以是0~255之间的任何一个 HSSFCell cell=row1.createCell(0); //设置单元格内容 cell.setCellValue("详细攻击情况统计"); cell.setCellStyle(style); //设置Excel中的边框(表头的边框) style.setAlignment(HSSFCellStyle.ALIGN_CENTER); style.setBorderBottom(HSSFCellStyle.BORDER_MEDIUM); style.setBottomBorderColor(HSSFColor.BLACK.index); style.setBorderLeft(HSSFCellStyle.BORDER_MEDIUM); style.setLeftBorderColor(HSSFColor.BLACK.index); style.setBorderRight(HSSFCellStyle.BORDER_MEDIUM); style.setRightBorderColor(HSSFColor.BLACK.index); style.setBorderTop(HSSFCellStyle.BORDER_MEDIUM); style.setTopBorderColor(HSSFColor.BLACK.index); //设置字体 HSSFFont font = wb.createFont(); font.setFontHeightInPoints((short) 16); // 字体高度 font.setFontName("黑体"); // 字体 style.setFont(font);