Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java将集合的集合导出到Excel_Java_Excel_Collections_Export_Iteration - Fatal编程技术网

Java将集合的集合导出到Excel

Java将集合的集合导出到Excel,java,excel,collections,export,iteration,Java,Excel,Collections,Export,Iteration,在使用OSWorkflow框架的项目中,我的任务是将用户权限导出到excel报表。我把它们都从数据库中取出来,完成了所有必要的检查和操作。在这一步中,我有一个包含其他集合的集合,它们也包含集合等等 在我看来,报告的结构如下: 用户1 权限1(例如日记账类型) 日志类型1 新的(这些可与此日志操作一起使用) 编辑 删除 看法 日志类型2 看法 许可证2 连接许可 真的 许可证3 导航权限 菜单文件 archiveCases 档案馆 新闻组 用户2。。。 等等 所以我必须迭代我的集合并将它们导出到e

在使用OSWorkflow框架的项目中,我的任务是将用户权限导出到excel报表。我把它们都从数据库中取出来,完成了所有必要的检查和操作。在这一步中,我有一个包含其他集合的集合,它们也包含集合等等

在我看来,报告的结构如下: 用户1 权限1(例如日记账类型) 日志类型1 新的(这些可与此日志操作一起使用) 编辑 删除 看法 日志类型2 看法 许可证2 连接许可 真的 许可证3 导航权限 菜单文件 archiveCases 档案馆 新闻组 用户2。。。 等等

所以我必须迭代我的集合并将它们导出到excel。 我知道在迭代中必须使用递归。但我不知道导出到excel要使用哪个框架。 有人可以通过类似于我的对象显示一些迭代示例并导出到excel吗? 下面是我的结构在调试器中的外观:

经过一些研究,我意识到递归在这里不起作用,因为我的对象中有不同的集合(首先,我考虑了某种双向递归,一个接一个的列表,一个接一个的映射,但无法实现)。我知道,这可能不是最好的解决方案,但我不得不使用迭代。 所以我在这里有两个任务,第一个是迭代所有数据,第二个是导出到excel。我将它们分开,并首先编写迭代,并将输出输出到控制台(以便于调试) 然后,我使用ApachePOI添加了excel导出。 迭代包含if`s{},因为集合具有不同的深度级别。 以下是代码:

private void exportPermissionDataToExcel(SortedMap allPermissions, HttpServletResponse response) {

    PropertyManager props = ResourcesProperties.getInstance();

    HSSFWorkbook wb = null;
    try {

        String headerString = "attachment; filename=\"" + EXCEL_FILE_NAME + ".xls\";";
        wb = new HSSFWorkbook();

        CellStyle style = wb.createCellStyle();
        Font font = wb.createFont();
        font.setBoldweight(Font.BOLDWEIGHT_BOLD);
        style.setFont(font);

        HSSFSheet workSheet = wb.createSheet(EXCEL_FILE_NAME);
        workSheet.createRow(1);

        int columnNumber = 0;

        for (Object pair : allPermissions.entrySet()) {

            Object key = ((Map.Entry) pair).getKey();
            Object values = ((Map.Entry) pair).getValue();

            int rowNumber = 0;
            Row row = workSheet.createRow(rowNumber);
            Cell cell = row.createCell(columnNumber);
            rowNumber++;

            if (key instanceof User) {
                cell.setCellValue(((User) key).getFullName() + " (" + ((User) key).getUsername() + ")");
            } else {
                cell.setCellValue(((Group) key).getName());
            }
            cell.setCellStyle(style);

            for (Object permissionsList : (List) values) {
                for (Object permissionValue : ((Map) permissionsList).entrySet()) {

                    Object key1 = ((Map.Entry) permissionValue).getKey();
                    Object listOfValues1 = ((Map.Entry) permissionValue).getValue();

                    columnNumber = 1;
                    row = workSheet.createRow(rowNumber);
                    cell = row.createCell(columnNumber);
                    rowNumber++;
                    cell.setCellValue(props.getProperty(key1.toString()));
                    cell.setCellStyle(style);

                    for (Object permissionsList1 : (List) listOfValues1) {

                        for (Object permissionMap : (List) permissionsList1) {

                            for (Object permissionMap1 : ((Map) permissionMap).entrySet()) {

                                Object key2 = ((Map.Entry) permissionMap1).getKey();
                                Object listOfValues2 = ((Map.Entry) permissionMap1).getValue();

                                columnNumber = 2;
                                //if property not found returns null, some records can be already transalted, translations for translations cannot be found => null
                                String message2 = props.getProperty(key2.toString());
                                if (message2 == null) {
                                    rowNumber = createCellAndSetValue(workSheet, row, cell, rowNumber, columnNumber,key2.toString());
                                } else {
                                    rowNumber = createCellAndSetValue(workSheet, row, cell, rowNumber, columnNumber, message2);
                                }

                                if (!key1.equals("lv.alise.usermanager.permissions.ConnectPermission")) {

                                    for (Object permissionValue3 : (List) listOfValues2) {
                                        if (key1.equals("lv.alise.usermanager.permissions.WorkflowPermission")) {

                                            for (Object permissionMap2 : ((Map) permissionValue3).entrySet()) {

                                                Object key3 = ((Map.Entry) permissionMap2).getKey();
                                                Object listOfValues3 = ((Map.Entry) permissionMap2).getValue();

                                                columnNumber = 3;
                                                rowNumber = createCellAndSetValue(workSheet, row, cell, rowNumber, columnNumber,props.getProperty(key3.toString()) );

                                                for (Object permissionValue4 : (List) listOfValues3) {
                                                    columnNumber = 4;
                                                    rowNumber = createCellAndSetValue(workSheet, row, cell, rowNumber, columnNumber,props.getProperty(permissionValue4.toString()) );
                                                }
                                            }
                                        } else {
                                            columnNumber = 3;
                                            rowNumber = createCellAndSetValue(workSheet, row, cell, rowNumber, columnNumber,props.getProperty(permissionValue3.toString()) );
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }

        response.setContentType("application/octetstream");
        response.setHeader("Content-Disposition", headerString);
        OutputStream out = response.getOutputStream();
        wb.write(out);
        out.close();
        wb.close();

    } catch (Exception e) {
        System.out.println(e.getMessage());
    }
}

private int createCellAndSetValue(HSSFSheet workSheet, Row row, Cell cell, int rowNumber, int columnNumber, String value) {
    row = workSheet.createRow(rowNumber);
    cell = row.createCell(columnNumber);
    rowNumber++;
    cell.setCellValue(value);
    return rowNumber;
}

可能有人会发现它有用。

经过一些研究,我意识到递归在这里不起作用,因为我的对象中有不同的集合(首先,我考虑了某种双向递归,一个接一个的列表,一个接一个的映射,但无法实现它)。我知道,这可能不是最好的解决方案,但我不得不使用迭代。 所以我在这里有两个任务,第一个是迭代所有数据,第二个是导出到excel。我将它们分开,并首先编写迭代,并将输出输出到控制台(以便于调试) 然后,我使用ApachePOI添加了excel导出。 迭代包含if`s{},因为集合具有不同的深度级别。 以下是代码:

private void exportPermissionDataToExcel(SortedMap allPermissions, HttpServletResponse response) {

    PropertyManager props = ResourcesProperties.getInstance();

    HSSFWorkbook wb = null;
    try {

        String headerString = "attachment; filename=\"" + EXCEL_FILE_NAME + ".xls\";";
        wb = new HSSFWorkbook();

        CellStyle style = wb.createCellStyle();
        Font font = wb.createFont();
        font.setBoldweight(Font.BOLDWEIGHT_BOLD);
        style.setFont(font);

        HSSFSheet workSheet = wb.createSheet(EXCEL_FILE_NAME);
        workSheet.createRow(1);

        int columnNumber = 0;

        for (Object pair : allPermissions.entrySet()) {

            Object key = ((Map.Entry) pair).getKey();
            Object values = ((Map.Entry) pair).getValue();

            int rowNumber = 0;
            Row row = workSheet.createRow(rowNumber);
            Cell cell = row.createCell(columnNumber);
            rowNumber++;

            if (key instanceof User) {
                cell.setCellValue(((User) key).getFullName() + " (" + ((User) key).getUsername() + ")");
            } else {
                cell.setCellValue(((Group) key).getName());
            }
            cell.setCellStyle(style);

            for (Object permissionsList : (List) values) {
                for (Object permissionValue : ((Map) permissionsList).entrySet()) {

                    Object key1 = ((Map.Entry) permissionValue).getKey();
                    Object listOfValues1 = ((Map.Entry) permissionValue).getValue();

                    columnNumber = 1;
                    row = workSheet.createRow(rowNumber);
                    cell = row.createCell(columnNumber);
                    rowNumber++;
                    cell.setCellValue(props.getProperty(key1.toString()));
                    cell.setCellStyle(style);

                    for (Object permissionsList1 : (List) listOfValues1) {

                        for (Object permissionMap : (List) permissionsList1) {

                            for (Object permissionMap1 : ((Map) permissionMap).entrySet()) {

                                Object key2 = ((Map.Entry) permissionMap1).getKey();
                                Object listOfValues2 = ((Map.Entry) permissionMap1).getValue();

                                columnNumber = 2;
                                //if property not found returns null, some records can be already transalted, translations for translations cannot be found => null
                                String message2 = props.getProperty(key2.toString());
                                if (message2 == null) {
                                    rowNumber = createCellAndSetValue(workSheet, row, cell, rowNumber, columnNumber,key2.toString());
                                } else {
                                    rowNumber = createCellAndSetValue(workSheet, row, cell, rowNumber, columnNumber, message2);
                                }

                                if (!key1.equals("lv.alise.usermanager.permissions.ConnectPermission")) {

                                    for (Object permissionValue3 : (List) listOfValues2) {
                                        if (key1.equals("lv.alise.usermanager.permissions.WorkflowPermission")) {

                                            for (Object permissionMap2 : ((Map) permissionValue3).entrySet()) {

                                                Object key3 = ((Map.Entry) permissionMap2).getKey();
                                                Object listOfValues3 = ((Map.Entry) permissionMap2).getValue();

                                                columnNumber = 3;
                                                rowNumber = createCellAndSetValue(workSheet, row, cell, rowNumber, columnNumber,props.getProperty(key3.toString()) );

                                                for (Object permissionValue4 : (List) listOfValues3) {
                                                    columnNumber = 4;
                                                    rowNumber = createCellAndSetValue(workSheet, row, cell, rowNumber, columnNumber,props.getProperty(permissionValue4.toString()) );
                                                }
                                            }
                                        } else {
                                            columnNumber = 3;
                                            rowNumber = createCellAndSetValue(workSheet, row, cell, rowNumber, columnNumber,props.getProperty(permissionValue3.toString()) );
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }

        response.setContentType("application/octetstream");
        response.setHeader("Content-Disposition", headerString);
        OutputStream out = response.getOutputStream();
        wb.write(out);
        out.close();
        wb.close();

    } catch (Exception e) {
        System.out.println(e.getMessage());
    }
}

private int createCellAndSetValue(HSSFSheet workSheet, Row row, Cell cell, int rowNumber, int columnNumber, String value) {
    row = workSheet.createRow(rowNumber);
    cell = row.createCell(columnNumber);
    rowNumber++;
    cell.setCellValue(value);
    return rowNumber;
}

可能有人会发现它很有用。

在我的脑海中,使用ApachePOI编写excel文件。。。有模型吗?或者你可以随心所欲地创作吗?不,没有模型,我必须自己设计。我想象了一些像树一样的东西。就像我在调试器中的集合一样,在报表中也是如此。根节点,以及更深的,用选项卡(excel列)分隔的节点,在我的脑海中使用ApachePOI来写入excel文件。。。有模型吗?或者你可以随心所欲地创作吗?不,没有模型,我必须自己设计。我想象了一些像树一样的东西。就像我在调试器中的集合一样,在报表中也是如此。根节点和更深的节点,用选项卡(excel列)分隔