Java将集合导出到Excel

在使用OSWorkflow框架的项目中,我有任务将用户权限导出为ex​​cel报告。 我从数据库中提取所有数据库,完成所有必要的检查和操作。 在这一步我有包含其他集合的集合,他们也包含集合等等。

在我看来,报告的结构如下:USER1 Permission1(例如日记types)JournalType1 new(这些日志操作可用)编辑删除视图JournalType2 View Permission2 ConnectionPermission true Permission3 NavigationPermission menu_documents archiveCases archiveReport JournalGroups USER2 …依此类推。

所以我必须通过我的集合迭代并导出到excel。 我知道我将不得不使用recursion进行迭代。 但是我不知道出口哪个框架能胜任使用。 任何人都可以通过类似于我的对象和出口到Excel的显示一些迭代的例子? 这里像我的结构看起来在debugging器: 在这里输入图像说明

经过一番研究之后,我意识到recursion在这里不起作用,因为我的对象中有不同的集合(首先,我正在考虑某种双向recursion,其中一种是由地图第二种,但无法实现)。 我知道,也许这不是最好的解决scheme,但我不得不使用迭代。 所以我在这里有两个任务,第一遍迭代所有的数据,第二次导出到Excel。 我分开他们,并写输出到控制台的迭代(为了更容易的debugging)然后我添加Excel使用Apache POI导出。 迭代包含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; } 

可能有人会发现它有用。