導出excel報表

前段時間把報表導出成excel,把代碼分享給大家

/** * * @Title: doExport 
* @Description: 數據導出 
* @param @param service 報表管理使用服務類 
* @param @param category 報表類型 
* @param @param json 報表統計條件 
* @param @param mimeType 導出文件類型 如:xls、cvs 等 
* @param @throws Exception 
* @return void * @throws 
*/ 
private void doExport(ReportManagementService service, String category, String json,UserVo user, String mimeType) throws Exception
{ 
   JSONObject jsonObject = JSONObject.fromObject(json); 
   String plantId = user.getPlantID();
   AbstractVo jsonVo = null; 
   List<AbstractVo> outputVoList = null; 
   List<DL2ReportOutputVo> DL2ListVo = new ArrayList<DL2ReportOutputVo>(); 
   try{ 
      
      jsonVo = (DL2ReportInputVo)JSONObject.toBean(jsonObject, DL2ReportInputVo.class); 
      DL2ReportInputVo inputVo = (DL2ReportInputVo)JSONObject.toBean(jsonObject, DL2ReportInputVo.class); 
      //獲得報表的數據 
     DL2ListVo = service.statDL2ReportVo(this.getOsp(), inputVo, plantId);
    }catch(Exception ex){ 
       log.debug("Get report data error: "+ ex); 
       throw new Exception("Get report data error: "+ ex); 
    } 
    OutputStream os = null; 
     try{
         os = getResponse().getOutputStream(); 
      }catch(IOException ioex){ 
        throw new Exception("Get response OutputStream Error: " + ioex);
      } 
      Calendar calendar = Calendar.getInstance(); 
      SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); 
      String currentDatetime = sdf.format(calendar.getTime()); 
       getResponse().reset(); 
       getResponse().setHeader("Content-disposition", "attachment; filename=" + category + currentDatetime+ ".xls");        getResponse().setContentType("application/msexcel"); 
       WritableWorkbook workbook = null; 
       WritableSheet sheet = null; 
      try{ 
          workbook = Workbook.createWorkbook(os); 
          sheet = workbook.createSheet("Sheet 1", 0); 
            sheet.getSettings().setDefaultColumnWidth(15); 
         //create header 
          WritableFont headerFont = new WritableFont(WritableFont.ARIAL,10,WritableFont.BOLD,false,UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.BLACK);           WritableCellFormat headerFormat = new WritableCellFormat(headerFont); if("DL2".equals(category)){ DL2ReportInputVo inputVo = (DL2ReportInputVo)jsonVo;    
           //設定excel標題的名稱以及位置    
    Label titleLabel = new Label(0, 0, "行政發文查詢清單", headerFormat);
    Label sendDateDurationLabel = new Label(0, 1, "發文日期:"+inputVo.getSendDateBegin()+" 至 "+inputVo.getSendDateEnd(), headerFormat);
    Label serialNumberLabel = new Label(0,2,"序號",headerFormat); 
    Label fileNumberLabel = new Label(1,2,"文件編號",headerFormat);
    Label fileTitleLabel = new Label(2,2,"文件標題",headerFormat);
    Label fileTypeLabel = new Label(3,2,"公文類別",headerFormat);
    Label pageNumberLabel = new Label(4,2,"頁數",headerFormat);
    Label drafterLabel = new Label(5,2,"擬稿人",headerFormat);
    Label signerLabel = new Label(6,2,"簽發人",headerFormat);
    Label approveDateLabel = new Label(7,2,"批准日期",headerFormat);
    Label sendDateLabel = new Label(8,2,"發文日期",headerFormat);
    Label sendWayLabel = new Label(9,2,"外發方式",headerFormat);
    Label toUnitLabel = new Label(10,2,"主送單位",headerFormat);
    //添加到excel sheet中
    sheet.addCell(titleLabel);
    sheet.addCell(sendDateDurationLabel);
    sheet.addCell(serialNumberLabel);
    sheet.addCell(fileNumberLabel);
    sheet.addCell(fileTitleLabel);
    sheet.addCell(fileTypeLabel);
    sheet.addCell(pageNumberLabel);
    sheet.addCell(drafterLabel);
    sheet.addCell(signerLabel);
    sheet.addCell(approveDateLabel);
    sheet.addCell(sendDateLabel);
    sheet.addCell(sendWayLabel);
    sheet.addCell(toUnitLabel);
    if (DL2ListVo != null && !DL2ListVo.isEmpty()){
     Label serialNumber = null;
     Label fileNumber = null;
     Label fileType = null;
     Label fileTitle = null;
     Label pageNumber = null;
     Label drafter = null;
     Label signer = null;
     Label approveDate = null;
     Label sendDate = null;
     Label sendWay = null;
     Label toUnit =null;
     for ( int i = 0 ;i<DL2ListVo.size() ; i++){
      DL2ReportOutputVo outPut = DL2ListVo.get(i);
      serialNumber = new Label(0,3 + i,outPut.getSerialNumber());
      fileNumber = new Label(1,3 +i,judgeNull(outPut.getFileNumber()));
      fileTitle = new Label(2,3+i,outPut.getFileTitle());
      fileType = new Label(3,3+i,outPut.getFileType());
      pageNumber = new Label(4,3+i,judgeNull(outPut.getPageNumber()));
      drafter = new Label(5,3+i,judgeNull(outPut.getDrafter()));
      signer = new Label(6,3+i,outPut.getSigner());
      approveDate = new Label(7,3 + i,outPut.getApproveDate());
      sendDate = new Label(8,3+i,outPut.getSendDate());
      sendWay = new Label(9,3+i,judgeNull(outPut.getSendWay()));
      toUnit = new Label(10,3+i,outPut.getToUnit());
     // 把相應的數據放入到excel中      
      sheet.addCell(serialNumber);
      sheet.addCell(fileNumber);
      sheet.addCell(fileTitle);
      sheet.addCell(fileType);
      sheet.addCell(pageNumber);
      sheet.addCell(drafter);
      sheet.addCell(signer);
      sheet.addCell(approveDate);
      sheet.addCell(sendDate);
      sheet.addCell(sendWay);
      sheet.addCell(toUnit);
     }
       
    }
   }
  }catch(Exception ex){
   
   log.debug("Generate excel error: " + ex);
   throw new Exception("Generate excel error: " + ex);
   
  }finally{
   try{
    workbook.write();
    workbook.close();
    os.close();
   }catch(Exception ex){
    log.debug("Close WritableWorkbook error: " + ex);
    throw new Exception("Close WritableWorkbook error: " + ex);
   }
  }
  
  
 }
 //導出報表時判斷是否爲空,爲空不顯示爲null
 public String judgeNull(String str){
  String judgeStr ="";
  if(str != "null"){
   judgeStr = str;
  }
  return judgeStr;
 }

以前覺得報表導出excel比較神祕,不過當自己要做這個事情的時候查找一些資料,也能很快的搞定。想到朋友經常說的一句話---justdo it

其實有時候害怕做什麼事情,找各種藉口說做不好,其實就是在給自己的懶惰找藉口。拒絕懶惰,走向成功.


發佈了30 篇原創文章 · 獲贊 4 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章