• JAVA代码实现嵌套层级列表,POI导出嵌套层级列表


    要实现POI导出EXCEL形如

    --A1(LV1)

    ----B1(LV2)

    ----B2(LV2)

    ------C1(LV3)

    ------C2(LV3)

    ----B3(LV2)

    --A1(LV1)

    一.能用到的数据字段

    ID(主键)、PID(父科目ID)、NAME(名称)、LEVEL(当前层级)

    二.思路:

    定义一个空的科目列表用来存放已经排好序的科目。创建一个迭代器传入父节点查出它的所有子节点,遍历子节点插入到科目列表的同时再次调用这个迭代器,这样程序能够在插入一个节点后如果发现有子节点继续插入子节点。最后返回排好序的科目树。

    三.JAVA代码

    /**
     * 
     * <p>Description: 根据根节点获取嵌套科目树</p>
     * @param root 根节点,只需itemCode
     * @return 嵌套科目树
     */
    public List<Subject> getSubjectListByRoot(Subject root){
        //定义一个空的科目列表
        List<Subject> subjectTree = new ArrayList<Subject>();
        //查询出根节点的具体信息
        root = this.subjectManager.searchSubjectByCode(root.getItemCode());
        //将根节点插入到嵌套科目树里,因为迭代出来的科目树是没有根节点的
        subjectTree.add(root);
        //调用迭代器
        subjectTree = SubjectIteration(root, subjectTree);
        return subjectTree;
    }
    
    /**
     * 
     * <p>Description: 嵌套科目树迭代器</p>
     * @param subject 父节点
     * @param subjectTree 科目树
     * @return 嵌套科目树
     */
    public List<Subject> SubjectIteration(Subject subject, List<Subject> subjectTree) {
        //根据父节点查子节点
        List<Subject> subjects = this.subjectManager.searchListSubjectByParent(subject);
        if (subjects != null) {
            //遍历子节点并迭代
            for (Subject subjectResult : subjects) {
                //将节点插入到嵌套科目树里
                subjectTree.add(subjectResult);
                SubjectIteration(subjectResult,subjectTree);
            }
        }
        return subjectTree;
    }

    四.SQL

    根据父节点查子节点的一段SQL只需比对父节点的ID和子节点的PID即可

    五.POI导出

    /**
     * 
     * <p>Description: 科目树导出</p>
     * @param request
     * @param response
     * @return Excel文件
     * @throws Exception
     */
    public ModelAndView downloadExcel(HttpServletRequest request, 
            HttpServletResponse response) throws Exception {
        //文件配置
        String fileName = new String(("科目导出文件.xls").getBytes("UTF-8"), "iso-8859-1");
        response.reset();
        response.setHeader("Content-disposition", "attachment;filename=" + fileName);
        response.setContentType("application/vnd.ms-excel;charset=utf-8");
        //创建POI-workbook文件
        XSSFWorkbook workbook = new XSSFWorkbook();
        XSSFSheet sheet = workbook.createSheet("科目树");
        //插入抬头
        PoiUtil.addRowSXSSF(sheet, 0, new String[] { "说明:", "level1", "level2", "level3", "level4", "level5", "level6",
                "level7", "level8" });
        //调整sheet样式
        //
        CellStyle styleRed = workbook.createCellStyle();
        styleRed.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);
        styleRed.setFillForegroundColor(IndexedColors.RED.index);
        //绿
        CellStyle styleGreen = workbook.createCellStyle();
        styleGreen.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);
        styleGreen.setFillForegroundColor(IndexedColors.LIME.index);
        //
        CellStyle styleGrey = workbook.createCellStyle();
        styleGrey.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);
        styleGrey.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.index);
        //
        CellStyle styleWhite = workbook.createCellStyle();
        styleWhite.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);
        styleWhite.setFillForegroundColor(IndexedColors.WHITE.index);
        //金黄
        CellStyle styleGold = workbook.createCellStyle();
        styleGold.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);
        styleGold.setFillForegroundColor(IndexedColors.GOLD.index);
        //
        CellStyle styleYellow = workbook.createCellStyle();
        styleYellow.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);
        styleYellow.setFillForegroundColor(IndexedColors.YELLOW.index);
        //亮黄
        CellStyle styleLight = workbook.createCellStyle();
        styleLight.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);
        styleLight.setFillForegroundColor(IndexedColors.LIGHT_YELLOW.index);
        //柠檬
        CellStyle styleLemon = workbook.createCellStyle();
        styleLemon.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);
        styleLemon.setFillForegroundColor(IndexedColors.LEMON_CHIFFON.index);
        //设置抬头颜色
        XSSFRow row = sheet.getRow(0);
        Cell cell = row.getCell(1);
        cell.setCellStyle(styleRed);
        cell = row.getCell(2);
        cell.setCellStyle(styleGreen);
        cell = row.getCell(3);
        cell.setCellStyle(styleGrey);
        cell = row.getCell(4);
        cell.setCellStyle(styleWhite);
        cell = row.getCell(5);
        cell.setCellStyle(styleGold);
        cell = row.getCell(6);
        cell.setCellStyle(styleYellow);
        cell = row.getCell(7);
        cell.setCellStyle(styleLight);
        cell = row.getCell(8);
        cell.setCellStyle(styleLemon);
        //查询Excel用科目树
        List<Subject> subjectTree = new ArrayList<Subject>();
        Subject root = new Subject();
        root.setItemCode("1001");
        subjectTree = getSubjectListByRoot(root);
        //插入数据
        int index = 0;
        for(Subject subject : subjectTree){
            index = index + 1;
            Row dataRow = sheet.createRow(index);
            String lv = subject.getLevel();
            if(lv.equals("1")){ 
                Cell dataCell = dataRow.createCell(0);
                dataCell.setCellValue(subject.getItemName());
                dataCell.setCellStyle(styleRed);
            }
            else if(lv.equals("2")){ 
                Cell dataCell = dataRow.createCell(0);
                dataCell.setCellValue(subject.getItemName());
                dataCell.setCellStyle(styleGreen);
            }
            else if(lv.equals("3")){ 
                Cell dataCell = dataRow.createCell(0);
                dataCell.setCellValue(subject.getItemName());
                dataCell.setCellStyle(styleGrey);
            }
            else if(lv.equals("4")){ 
                Cell dataCell = dataRow.createCell(0);
                dataCell.setCellValue(subject.getItemName());
                dataCell.setCellStyle(styleWhite);
            }
            else if(lv.equals("5")){ 
                Cell dataCell = dataRow.createCell(0);
                dataCell.setCellValue(subject.getItemName());
                dataCell.setCellStyle(styleGold);
            }
            else if(lv.equals("6")){ 
                Cell dataCell = dataRow.createCell(0);
                dataCell.setCellValue(subject.getItemName());
                dataCell.setCellStyle(styleYellow);
            }
            else if(lv.equals("7")){ 
                Cell dataCell = dataRow.createCell(0);
                dataCell.setCellValue(subject.getItemName());
                dataCell.setCellStyle(styleLight);
            }
            else if(lv.equals("8")){ 
                Cell dataCell = dataRow.createCell(0);
                dataCell.setCellValue(subject.getItemName());
                dataCell.setCellStyle(styleLemon);
            }
        }
        sheet.setColumnWidth(0, 9000);
        //创建输出流,生成文件
        OutputStream out = new BufferedOutputStream(response.getOutputStream());
        workbook.write(out);
        out.flush();
        out.close();
        return null;
    }
  • 相关阅读:
    模拟赛QAQ
    复习计划
    luogu P1080 国王游戏
    [NOIP2012T3]开车旅行
    luogu P1967 货车运输
    同余方程组的扩展欧几里得解法
    luogu P1476 休息中的小呆
    GRYZY #13. 拼不出的数
    GRYZY- #10. 财富
    GRYZY #8. 公交车
  • 原文地址:https://www.cnblogs.com/huangjian2/p/6026967.html
Copyright © 2020-2023  润新知