jxl导出Excel

运用jxl导出Excel

开发时出现的问题:

1、尽量减少数据库的访问;

2、注意一些细节问题(变量方法的命名问题等)

 

jxl导出excel还是很简单的,设置表单样式,设置表头,插入数据即可。不再过多赘述

 

public ActionForward exportBudgetList(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) throws Exception{
        final int deptId = NumberUtils.toInt(request.getParameter("deptId"));
        final int feeTypeId = NumberUtils.toInt(request.getParameter("feeTypeId"));
        final int purposeId = NumberUtils.toInt(request.getParameter("purposeId"));
        int year=NumberUtils.toInt(request.getParameter("year"));
        final int projId =  NumberUtils.toInt(request.getParameter("projectId"));
        final String dayType = StringUtils.trimToEmpty(request.getParameter("feeDayTypeId"));
        
        FeeDayType feeTimeTypeEnum = null;
        
        if(StringUtils.isNotBlank(dayType)){
            feeTimeTypeEnum  = FeeDayType.valueOf(dayType);
        }
        String sheetName =year+"Budget";
        response.setHeader("Content-disposition", "attachment; filename=budgetList.xls");  
        response.setContentType("application/msexcel");
        ServletOutputStream out = response.getOutputStream();
        
        WritableSheet  sheet = null;
        
        WritableWorkbook wwb = null;
        wwb = Workbook.createWorkbook(out);
        
        sheet = wwb.createSheet(sheetName, 0);
        
        //创建表头样式
        WritableFont wfc = new WritableFont(WritableFont.ARIAL,12,WritableFont.BOLD,false,UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.BLACK);  
        WritableCellFormat headerFmt =  new WritableCellFormat(wfc);  
        headerFmt.setAlignment(Alignment.CENTRE);
        headerFmt.setBorder(jxl.format.Border.ALL,jxl.format.BorderLineStyle.THIN);
        headerFmt.setBackground(Colour.BRIGHT_GREEN);        
        
        WritableCellFormat bodyFmt =  new WritableCellFormat(wfc);  
        bodyFmt.setBorder(jxl.format.Border.ALL,jxl.format.BorderLineStyle.THIN);
        bodyFmt.setFont(new WritableFont(WritableFont.ARIAL,10,WritableFont.NO_BOLD,false,UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.BLACK));
        
        
        //填写表头
        int colNum=0;
        int rowNum=0;
        
        String[] headers={"部门名称","费用类型","项目","用途","发生时间"};
        for(int i=0;i<headers.length;i++){
            sheet.addCell(new Label(colNum,rowNum,headers[i],headerFmt));
            sheet.setColumnView(colNum, 12);
            colNum++;
        }
        
        for(int mount=1;mount<13;mount++) {
            String label=mount+"月";
            sheet.addCell(new Label(colNum,rowNum,label,headerFmt));
            sheet.setColumnView(colNum, 12);
            colNum++;
        }
        
        List<DeptBudget> deptBudgetList = applyService.findDeptBudgets(deptId, feeTypeId, projId, purposeId, feeTimeTypeEnum, year);
        //插入数据
        if(deptBudgetList!=null && !deptBudgetList.isEmpty()){
            for(DeptBudget budget: deptBudgetList){
                rowNum++;
                sheet.setRowView(rowNum, 400);
                int colIndex= 0;
                sheet.addCell(new Label(colIndex++,rowNum,String.valueOf(deptService.getDepartmentById(budget.getDeptId()).getDeptName()),bodyFmt));
                sheet.addCell(new Label(colIndex++,rowNum,String.valueOf(applyService.getFeeTypeById(budget.getFeeTypeId()).getTypeName()),bodyFmt));
                
                Project proj = applyService.getProjectById(budget.getProjId());
                
                if(proj==null){
                    sheet.addCell(new Label(colIndex++,rowNum,StringUtils.EMPTY,bodyFmt));
                }else{
                    sheet.addCell(new Label(colIndex++,rowNum,String.valueOf(proj.getPrjtName()),bodyFmt));
                }
                
                FeePurpose purpose = applyService.getFeePurposeById(budget.getPurposeId());
                if(purpose ==null){
                    sheet.addCell(new Label(colIndex++,rowNum,StringUtils.EMPTY,bodyFmt));
                }else{
                    sheet.addCell(new Label(colIndex++,rowNum,String.valueOf(purpose.getFeePurposeName()),bodyFmt));
                }
                
                if(budget.getDayType()==null){
                    sheet.addCell(new Label(colIndex++,rowNum,StringUtils.EMPTY,bodyFmt));
                }else{
                    sheet.addCell(new Label(colIndex++,rowNum,String.valueOf(budget.getDayType().getStateName()),bodyFmt));
                }                
                
                
                //填写预算
                 List<MonthBudget>  mbList = budget.getBudgetList();
                 if(mbList!=null && !mbList.isEmpty()) {
                     int startColNum  = headers.length;
                     for(MonthBudget  mBudget : mbList) {
                         double amt  =  NumberUtils.toDouble(CustomFunctions.renderSalaryAmount(mBudget.getBudget()));
                         sheet.addCell(new Label(startColNum++,rowNum,String.valueOf(amt),bodyFmt));
                     }
                 }
            }
        }
        wwb.write();
        wwb.close();        
        return null;
    }

posted @ 2014-03-04 11:34  UpdateMySelf  阅读(432)  评论(0编辑  收藏  举报