• jxl应用事例


    实例中主要目的是解析jxl使用流程以及jxl绘制Excel的写法思路,代码掩去了项目中的真实数据,请根据需求酌情修改,如果有帮助到有需要的人,不胜欢喜。

    Dao层为查询数据库,返回list数据,此处省略。

    ==============service

    public void exportExcel(HttpServletResponse response){
            try{
                //列坐标
                int columIndex[] = {0,1,2,3,4,5,6,};
                //每一列宽度
                int colwidth[] = {10,10,10,10,10,10};
                //每一列字段key
                String[] dataKey = {"test1","test2","test3","test4","test5","test6"};
                //列表数据
                List<Map<String,Object>> dataList = tableTestDao.findTableData();
                //合计每一列的key
                String[] countKey = {"test1","test2","test3","test4","test5","test6"};
               
                //导出execl
                tableExcelService.exportExcel( FILE_NAME, response, "测试表格", columIndex, colwidth, dataKey, dataList, countKey, "three" );
            }catch (Exception e) {
                throw new BusinessException(e, ExceptionEnum.NULL, e.getMessage());
            }
        }

    =================TableExcelService工具类方法(1)

        /**
         * 导出excel
         * @param fileName文件名
         * @param response
         * @param title标题名
         * @param columIndex列坐标
         * @param colwidth每一列宽度
         * @param dataKey每一列字段key
         * @param dataList列表数据
         * @throws Exception
         */
        public void exportExcel(String fileName,HttpServletResponse response,String title,
                int[] columIndex,int[] colwidth,String[] dataKey,List<Map<String,Object>> dataList,
              String falg ) throws Exception{
            OutputStream os=null;
            WritableWorkbook workbook=null;
            try{
                os=response.getOutputStream();
                fileName=URLEncoder.encode(fileName,"GB2312");
                fileName=URLDecoder.decode(fileName, "ISO8859_1");
                response.setHeader("Content-Disposition","attachment;filename="+fileName+".xls");
                response.setContentType("application/msexcel");
                workbook = Workbook.createWorkbook(os);
                // 自定义的颜色
                Color color = Color.decode("#CCFFCC"); 
                workbook.setColourRGB(Colour.GREEN, color.getRed(),color.getGreen(), color.getBlue());
                //创建excel第一个sheet页
                WritableSheet sheet = workbook.createSheet("Sheet1", 0);
                //创建标题和表头
                if("three".equals( falg )||"four".equals( falg )){
                    sheet = createTableHead(sheet,title,columIndex,colwidth);
                }else if("one".equals( falg )){
                    sheet = createTableHeadOne(sheet,title,columIndex,colwidth);
                }else if("two".equals( falg )){
                    sheet = createTableHeadTwo(sheet,title,columIndex,colwidth);
                }
                //表格样式
                WritableCellFormat tdWcfF = new WritableCellFormat();
                tdWcfF.setBorder(Border.ALL, BorderLineStyle.THIN);
                tdWcfF.setAlignment(Alignment.CENTRE);
                tdWcfF.setVerticalAlignment(VerticalAlignment.CENTRE);
                //填入列表数据
                int startRow = 4;//从第五行开始填入值
                Map<String,Object> dataMap = null;
                Object obj=null;
                for(int row = 0;row <dataList.size();row++){
                    dataMap = dataList.get( row );
                    for(int col=0;col<dataKey.length;col++){
                        obj = dataMap.get(dataKey[col]);
                        sheet.addCell(new Label(col,row+startRow,obj==null?"0":obj.toString(),tdWcfF));
                    }
                }
                //合计
                if("three".equals( falg )||"four".equals( falg )){
                    int numStartRow = startRow+dataList.size();//到第几行了
                    sheet.mergeCells(0, numStartRow, 1, numStartRow);
                    sheet.addCell(new Label(0,numStartRow,"测试",tdWcfF));
                    for(int col=0;col<countKey.length;col++){
                        obj = countMap.get(countKey[col]);
                        sheet.addCell(new Label(col+2,numStartRow,obj==null?"0":obj.toString(),tdWcfF));
                    }
                }else if("one".equals( falg )){
                    int numStartRow = startRow+dataList.size();//到第几行了
                    sheet.mergeCells(0, numStartRow, 0, numStartRow);
                    sheet.addCell(new Label(0,numStartRow,"测试",tdWcfF));
                    for(int col=0;col<countKey.length;col++){
                        obj = countMap.get(countKey[col]);
                        sheet.addCell(new Label(col+1,numStartRow,obj==null?"0":obj.toString(),tdWcfF));
                    }
                }else if("two".equals( falg )){
                    int numStartRow = startRow+dataList.size();//到第几行了
                    sheet.mergeCells(0, numStartRow, 1, numStartRow);
                    sheet.addCell(new Label(0,numStartRow,"测试",tdWcfF));
                    for(int col=0;col<countKey.length;col++){
                        obj = countMap.get(countKey[col]);
                        sheet.addCell(new Label(col+2,numStartRow,obj==null?"0":obj.toString(),tdWcfF));
                    }
                }
                
                workbook.write();
            }catch (Exception e) {
                throw new RuntimeException(e.getMessage(),e);
            }finally{
                if(workbook != null) {
                    workbook.close();
                    workbook=null;
                }
                if(os != null) {
                    os.flush();
                    os.close();
                    os=null;
                }
            }
        }

    ===========TableExcelService工具类方法(2)

       /**
         * 创建标题和表头
         * @param sheet
         * @param title
         * @return
         * @throws Exception
         */
        private  WritableSheet createTableHead(WritableSheet sheet,String title,
                int[] columIndex,int[] colwidth) throws Exception{
            /*****格式设置******/
            //标题
            WritableCellFormat titleWcfF = new WritableCellFormat();
            //边线细线
            titleWcfF.setBorder(Border.ALL, BorderLineStyle.THIN);
            //水平居中
            titleWcfF.setAlignment(Alignment.CENTRE);
            //垂直居中
            titleWcfF.setVerticalAlignment(VerticalAlignment.CENTRE);
            //设置显示的字体样式,字体,字号,是否粗体,字体颜色 
            titleWcfF.setFont(new WritableFont(WritableFont.createFont("楷体_GB2312"),14,WritableFont.NO_BOLD,false,
                    UnderlineStyle.NO_UNDERLINE,Colour.BLACK));
            //表头
            WritableCellFormat thWcfF = new WritableCellFormat();
            thWcfF.setBorder(Border.ALL, BorderLineStyle.THIN);
            thWcfF.setAlignment(Alignment.CENTRE);
            thWcfF.setVerticalAlignment(VerticalAlignment.CENTRE);
            thWcfF.setBackground(jxl.format.Colour.GREEN);
            //创建标题,列,行,到第19列,到第0行
            sheet.mergeCells(0, 0, 19, 0);
            sheet.addCell(new Label(0,0,title,titleWcfF));
            //表头创建
            sheet.mergeCells(0, 1, 1, 3);//名称
            sheet.addCell(new Label(0,1,"测试1",thWcfF));
            //业务数(单位:个)列,行,到第19列,到第1行
            sheet.mergeCells(2, 1, 19, 1);
            sheet.addCell(new Label(2,1,"测试2",thWcfF));
            sheet.mergeCells(2, 2, 10, 2);
            sheet.addCell(new Label(2,2,"测试3",thWcfF));
            sheet.mergeCells(11, 2, 19, 2);
            sheet.addCell(new Label(11,2,"测试4",thWcfF));
            sheet.mergeCells(2, 3, 3, 3);
            sheet.addCell(new Label(2, 3,"测试5",thWcfF));
            sheet.mergeCells(4, 3, 5, 3);
            sheet.addCell(new Label(4, 3,"测试6",thWcfF));
            //单个单元格表头第6列,第3行,单元格内容,单元格样式
            sheet.addCell(new Label(6, 3,"测试7",thWcfF));
            sheet.addCell(new Label(7, 3,"测试8",thWcfF));
            sheet.addCell(new Label(8, 3,"测试9",thWcfF));
            sheet.addCell(new Label(9, 3,"测试10",thWcfF));
            sheet.addCell(new Label(10, 3,"测试11",thWcfF));
            sheet.mergeCells(11, 3, 12, 3);
          
            //设置列宽
            for(int i=0;i<columIndex.length;i++){
                sheet.setColumnView(columIndex[i], colwidth[i]);
            }
            return sheet;
        }
  • 相关阅读:
    我眼中的SCRUM
    文本转换程序
    免费接口
    看板,敏捷的另一种实现方式
    Android Asynchronous Http Client-Android异步网络请求客户端接口
    hdu4753 Fishhead’s Little Game 状态压缩,总和一定的博弈
    dbcp、c3p0、jdbc常用连接配置
    IE安全分析
    redis入侵小结
    heartbleed漏洞利用
  • 原文地址:https://www.cnblogs.com/laorenzhenhaoa/p/6669626.html
Copyright © 2020-2023  润新知