首页 > 解决方案 > 如何使用 apache-poi 在列中显示对象

问题描述

我有一个包含 234 个字段的大 DTO,我必须在使用 apache-poi 创建的 Excel 文件的列中显示此 DTO 的每个字段的值。

这是我的代码:

// Blank workbook
XSSFWorkbook workbook = new XSSFWorkbook();

Sheet sheet = workbook.createSheet("Export values");

// Get the Entity
Simfoot simEntity = simService.findById(simId).get();

Row row = sheet.createRow(0);
row.createCell(1).setCellValue("Consult our values");

// and after this I want to convert my Simfoot object to a column in the third column ( so creteCell(2) ..... ).

我想在我的第一列:什么都没有,在我的第二列中只有字符串显示(“咨询我们的价值观”),在我的第三列中我需要有我的 234 个字段。在一个单元格中有一个字段(字段的值)。因此,234 行在第三列中显示一个值。

我希望这很清楚。

非常感谢你的帮助。

标签: javaexcelapache-poi

解决方案


使用一些反射:

    // Blank workbook
    XSSFWorkbook workbook = new XSSFWorkbook();

    final Sheet sheet = workbook.createSheet("Export values");

    // Get the Entity
    final Simfoot simEntity = simService.findById(simId).get();

    Row row = sheet.createRow(0);
    row.createCell(1).setCellValue("Consult our values");

    // and after this I want to convert my Simfoot object to a column in the third column ( so creteCell(2) ..... ).
    Arrays.stream(simEntity.getClass().getDeclaredMethods())
            .filter(m -> m.getName().startsWith("get") && m.getParameterTypes().length == 0 && !void.class.equals(m.getReturnType()))
            .forEach(m -> {
                    try {
                            Object value = m.invoke(simEntity, null);
                            Row r = sheet.createRow(sheet.getLastRowNum()+1);
                            r.createCell(2).setCellValue(value == null ? "" : value.toString());
                    }
                    catch (Exception ex) {
                            // Manage Exception....
                    }
            });

推荐阅读