echart 匯出圖形報表到excel中
阿新 • • 發佈:2019-02-06
{ text: '匯出', id:'importExcelFile', iconCls: 'page_excel', handler: function () { var data = myChart.getDataURL("png"); $("#img").val(data); var startDate = Ext.isEmpty(Ext.getCmp('startDate'))?"":Ext.util.Format.date(Ext.getCmp('startDate').value,'Y-m-d'); var endDate = Ext.isEmpty(Ext.getCmp('endDate'))?"":Ext.util.Format.date(Ext.getCmp('endDate').value,'Y-m-d'); var startYm = Ext.isEmpty(Ext.getCmp('startYm'))?"":Ext.util.Format.date(Ext.getCmp('startYm').value,'Y-m'); var endYm = Ext.isEmpty(Ext.getCmp('endYm'))?"":Ext.util.Format.date(Ext.getCmp('endYm').value,'Y-m'); var statYm = Ext.isEmpty(Ext.getCmp('statYm'))?"":Ext.util.Format.date(Ext.getCmp('statYm').value,'Y-m'); var statYmd = Ext.isEmpty(Ext.getCmp('statYmd'))?"":Ext.util.Format.date(Ext.getCmp('statYmd').value,'Y-m-d'); var deptName = Ext.isEmpty(Ext.getCmp('deptName'))?"":Ext.getCmp('deptName').value; var deptOrgId = Ext.isEmpty(Ext.getCmp('deptOrgId'))?"":Ext.getCmp('deptOrgId').value; <c:if test="${fn:contains(queryCondition, '#startDate#') && fn:contains(queryCondition, '#endDate#')}"> if(!Ext.isEmpty(startDate)&&!Ext.isEmpty(endDate)){ $("#startDate").val(startDate); $("#endDate").val(endDate); $("#deptName").val(deptName); $("#deptOrgId").val(deptOrgId); $("#exportForm").submit(); }else{ Ext.MessageBox.alert("提示框","時間不能為空!"); } </c:if> } } <!-- chart --> <div id="chartsDiv" style="height:350px;margin-top: 10px;"></div> <script src="../echart/build/dist/echarts-all.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript"> var myChart; $(function() { Ext.Ajax.request({ method:'post', url: '<%=request.getContextPath()%>/chartDisplay/getChartOptions.do', params: { nodeId:${nodeId}, startDate:${startDate}, endDate:${endDate}, startYm:${startYm}, endYm:${endYm}, statYm:${statYm}, statYmd:${statYmd}, deptName:'${deptName}', deptOrgId:'${deptOrgId}' }, async: true, success: function (response) { var option = Ext.decode(response.responseText); myChart = echarts.init(document.getElementById('chartsDiv')); myChart.setOption(option, true); } }); }); </script> <form id="exportForm" action="<%=request.getContextPath()%>/chartDisplay/exportExcel.do" method="post"> <input type="hidden" name="img" id="img" /> <input type="hidden" name="startDate" id="startDate" /> <input type="hidden" name="endDate" id="endDate" /> <input type="hidden" name="statYm" id="statYm" /> <input type="hidden" name="endYm" id="endYm" /> <input type="hidden" name="statYmd" id="statYmd" /> <input type="hidden" name="deptName" id="deptName" /> <input type="hidden" name="nodeId" id="nodeId" value="${nodeId}" /> <input type="hidden" name="deptOrgId" id="deptOrgId" value="${deptOrgId}" /> <input type="hidden" name="type" id="type" value="${type}"/> </form> /** * 匯出excel方法 * @param request * @param response */ @RequestMapping("exportExcel") public void exportExcel(HttpServletRequest request, HttpServletResponse response){ String data = request.getParameter("img"); String startDate = request.getParameter("startDate"); String endDate = request.getParameter("endDate"); String statYm = request.getParameter("statYm"); String endYm = request.getParameter("endYm"); String statYmd = request.getParameter("statYmd"); String deptName = request.getParameter("deptName"); String deptOrgId = request.getParameter("deptOrgId"); String nodeIdStr = request.getParameter("nodeId"); String type = request.getParameter("type"); QueryCondition queryCondition=new QueryCondition(); if(!StringUtil.isBlank(startDate)){ queryCondition.setStartDate(startDate); }else if(!StringUtil.isBlank(endDate)){ queryCondition.setEndDate(endDate); }else if(!StringUtil.isBlank(statYm)){ queryCondition.setStatYm(statYm); }else if(!StringUtil.isBlank(endYm)){ queryCondition.setEndYm(endYm); }else if(!StringUtil.isBlank(statYmd)){ queryCondition.setStatYmd(statYmd); }else if(!StringUtil.isBlank(deptName)){ queryCondition.setDeptName(deptName); }else if(!StringUtil.isBlank(deptOrgId)){ queryCondition.setDeptOrgId(Integer.valueOf(deptOrgId)); }else if(!StringUtil.isBlank(type)){ queryCondition.setType(Integer.valueOf(type)); } Integer nodeId = null; if(!StringUtil.isBlank(nodeIdStr)){ nodeId = Integer.valueOf(nodeIdStr); } try { String userName = System.getProperty("user.name"); String filePath = "C:\\Users\\"+userName+"\\Desktop\\chart"; File file = new File(filePath); if(!file.exists()){ file.mkdir(); } String fileName = filePath +"\\"+ System.currentTimeMillis()+".png"; createImage(request, response, fileName, data); createExcel(request, response, fileName,nodeId,queryCondition); } catch (Exception e) { e.printStackTrace(); } } public void createImage(HttpServletRequest request, HttpServletResponse response,String fileName, String data) throws ServletException, IOException { try { String[] url = data.split(","); String u = url[1]; byte[] b = new BASE64Decoder().decodeBuffer(u); OutputStream out = new FileOutputStream(new File(fileName)); out.write(b); out.flush(); out.close(); } catch (Exception e) { e.printStackTrace(); } } public void createExcel(HttpServletRequest request, HttpServletResponse response, String fileName,Integer nodeId,QueryCondition queryCondition) throws ServletException, IOException { HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet(); HSSFRow row = null; row = sheet.createRow(60); HSSFCell cells = row.createCell((short) 0); cells.setCellType(HSSFCell.CELL_TYPE_BLANK); ByteArrayOutputStream outStream = new ByteArrayOutputStream(); BufferedImage bufferImg = ImageIO.read(new File(fileName)); ImageIO.write(bufferImg, "PNG", outStream); HSSFPatriarch patri = sheet.createDrawingPatriarch(); HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 1023,100,(short) 0, 0, (short)7, 22); patri.createPicture(anchor, wb.addPicture(outStream.toByteArray(), HSSFWorkbook.PICTURE_TYPE_PNG)); try { OutputStream out = null; response.setContentType("application/x-msdownload"); String sql = ""; String codedFileName=""; Object[] coloumnNames=new Object[]{}; String[] coloumnFields=new String[]{}; Map<String,Object> map=new HashMap<String, Object>(); if(nodeId!=null){ //1查詢出節點對應的報表sql語句 User user = (User) request.getSession().getAttribute(Constant.CUR_USER_SESSION); map=chartDisplayServiceImp.findQueryCondition(queryCondition, user, nodeId); Map<String,Object> fieldsMaps = chartDisplayServiceImp.findDisplayFieldNames(map); coloumnNames = (Object[]) fieldsMaps.get("coloumnNames"); coloumnFields = (String[]) fieldsMaps.get("coloumnFields"); sql = (String)fieldsMaps.get("sqlContent"); String nodeName = (String) fieldsMaps.get("nodeName"); // 進行轉碼,使其支援中文檔名 codedFileName = java.net.URLEncoder.encode(nodeName, "UTF-8"); } HSSFCellStyle style = wb.createCellStyle(); HSSFFont font = wb.createFont(); font.setFontName("宋體"); font.setBoldweight((short) Font.BOLD); //粗體 font.setColor(HSSFColor.BLUE.index); //綠字 style.setFont(font); if(queryCondition.getType()!=8){// //表頭 HSSFRow row1 = sheet.createRow(23); int crossLineNum = chartDisplayServiceImp.exportExcelHeaders(sheet,row1,style,coloumnNames); //資料部分 List<Map<String,Object>> list = chartDisplayServiceImp.findChartDisplayList(map,sql); chartDisplayServiceImp.exportExcelDatas(sheet,list,coloumnFields,crossLineNum); } response.setHeader("Content-Disposition", "attachment; filename=" +codedFileName+".xls"); out = response.getOutputStream(); wb.write(out); out.flush(); out.close(); } catch (Exception e) { e.printStackTrace(); } }
</pre><pre>