利用ajax匯出Excel檔案
阿新 • • 發佈:2019-01-01
記得之前寫過ajax無法彈出儲存下載對話方塊,就直接使用form表單進行提交,下載Excel的。但是如果需要傳遞引數的話,需要使用隱藏空間,有時候還有些麻煩,而使用ajax傳遞引數很方便啊?!於是我們可以通過ajax匯出Excel
htm程式碼如下:
<button type="button" class="btn green" onclick="rptDownLoad()"> 報 表 下 載 </button>
javaScript指令碼程式碼如下:
Action中處理如下:function rptDownLoad(){ var rptId = $("#rptSelect").val(); var date = $("#dateSelect").val(); var form = $("<form>"); form.attr('style', 'display:none'); form.attr('target', ''); form.attr('method', 'post'); form.attr('action', '/ODSMSPortlet/report/reportSys!exportRpt.action'); var input1 = $('<input>'); input1.attr('type', 'hidden'); input1.attr('name', 'rptId'); input1.attr('value', rptId); var input2 = $('<input>'); input2.attr('type', 'hidden'); input2.attr('name', 'date'); input2.attr('value', date); $('body').append(form); form.append(input1); form.append(input2); form.submit(); form.remove(); }
/** * 報表下載 */ public void exportRpt(){ setDataObject(); try{ //專案中封裝的dto可以直接獲取js中傳遞的date和rptId String date = dto.getInput("date").toString(); dhlCommonService.queryForObject("reportSys.selectRptList", dto); String rptName = dto.getOutputForJSONObject().getString("rptName"); //獲取報表標題中英文陣列 String header = dto.getOutputForJSONObject().getString("upHeaders"); String headers[] = header.split("\\|"); int len = headers.length; String name[] = new String[len]; //title為英文標題 String title[] = new String[len]; //name為中文標題 int index = 0; for(int i = 0 ; i<len ; i++){ name[index] = headers[i].split("#")[0]; title[index] = headers[i].split("#")[1]; index++; } //查詢sql,獲取報表明細 String sql = dto.getOutputForJSONObject().getString("sqlDesc"); Map<String, Object> map = new HashMap<String,Object>(); map.put("cycleId", date); dto.addInput("paramMap", map); dhlCommonService.queryJSONArrayBySql(sql, dto); JSONArray rptArray = dto.getOutputForJSONArray(); //設定輸出流 OutputStream out = response.getOutputStream(); response.reset(); String fileName = rptName+"_"+date;// 檔名 response.setHeader("Content-Disposition", "attachment;filename="+new String(fileName.getBytes("gbk"),"iso8859-1")+".xlsx"); response.setContentType("application/x-download; charset=UTF-8"); //生成Excel sheet HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet(fileName); //設定標題樣式 HSSFCellStyle headStyle = wb.createCellStyle(); headStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); headStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); headStyle.setFillForegroundColor((short)13); HSSFFont font = wb.createFont(); font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); headStyle.setFont(font); //設定內容樣式 HSSFCellStyle style = wb.createCellStyle(); style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 建立一個居中格式 HSSFRow row = sheet.createRow(0); HSSFCell cell = null; //為Excel新增表頭 for(int i = 0 ; i<len ; i++){ cell = row.createCell(i); cell.setCellValue(name[i]); cell.setCellStyle(headStyle); //設定列表寬度 sheet.setColumnWidth(i,name[i].toString().length() * 800); } //為Excel新增資料 for(int j = 0 ; j<rptArray.size() ; j++){ JSONObject jo = (JSONObject) rptArray.get(j); row = sheet.createRow(j+1); for(int k = 0 ; k<title.length ; k++){ //按照標題陣列取值 String content = jo.get(title[k]).toString(); cell = row.createCell(k); cell.setCellValue(content); cell.setCellStyle(style); } } //將excel寫入到response輸出流 wb.write(out); response.getOutputStream().flush(); response.getOutputStream().close(); }catch(Exception e){ e.printStackTrace(); } }