Я разрабатываю отчет Excel с данными иерархии. Используя JETT (переводчик шаблонов java excel), я хотел бы дублировать строки из основного цикла, когда есть коллекция коллекции. Вот краткий пример.
public class JettTest {
@Test
public void run() throws IOException {
ClassLoader classLoader = getClass().getClassLoader();
InputStream template = classLoader.getResourceAsStream("template.xlsx");
try (
XSSFWorkbook wb = new XSSFWorkbook(template);
FileOutputStream fos = new FileOutputStream("target/output.xlsx")
) {
Map<String, Object> params = new HashMap<>();
Parent parent1 = new Parent("parent1", Arrays.asList("child1", "child2"));
Parent parent2 = new Parent("parent2", Arrays.asList("childX", "childY"));
List<Parent> parents = Arrays.asList(parent1, parent2);
params.put("parents", parents);
ExcelTransformer transformer = new ExcelTransformer();
transformer.transform(wb, params);
wb.write(fos);
}
}
public class Parent {
private String name;
private List<String> children;
public Parent(String name, List<String> children) {
this.name = name;
this.children = children;
}
public String getName() {
return name;
}
public List<String> getChildren() {
return children;
}
}
}
Шаблон Excel
А1 это
<jt:forEach items = "${parents}" var = "parent">${parent.name}
B1 это
<jt:forEach items = "${parent.children}" var = "child">${child}</jt:forEach></jt:forEach>
Это дает мне
Это выглядит хорошо, однако мне нужно продублировать имена родителей и получить
Есть идеи, пожалуйста?


Вам нужно, чтобы {parent.name} находился в дочернем теге forEach, если вы хотите, чтобы родительское имя отображалось для каждого дочернего имени.
Что произойдет, если вы переместите дочерний тег forEach из B1 в A1 сразу после родительского тега forEach?
Действительно, помогает. Так легко! Спасибо, брат