前段時間把報表導出成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 。
其實有時候害怕做什麼事情,找各種藉口說做不好,其實就是在給自己的懶惰找藉口。拒絕懶惰,走向成功.