echart 導出圖形報表到excel中

 {
                        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>


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章