Java使用XDocReport+FreeMarker导出Word时遍历集合中的集合
时间: 2025-02-24 17:41:23 浏览: 110
在Java中,使用XDocReport和FreeMarker模板引擎结合Apache POI库来处理Word文档时,如果你想要遍历嵌套的集合并将其内容插入到Word文档中,通常会这样做:
首先,你需要在FreeMarker模板文件(`.ftl`)中设置循环结构。假设你有一个List<List<String>>的对象,你可以这样表示:
```freemarker
<#list outerCollection as outerItem>
<table border="1">
<#list outerItem as innerItem>
<tr>
<td>${innerItem}</td> <!-- 这里将innerItem遍历显示 -->
</tr>
</#list>
</table>
</#list>
```
然后,在Java代码中,你需要准备数据模型,包括你的嵌套集合,并传递给XDocReport:
```java
import freemarker.template.Configuration;
import org.xdocreport.core.XDocReport;
import org.xdocreport.data.DocumentDataModel;
public void generateReport(List<List<String>> data) throws Exception {
// 初始化Freemarker配置
Configuration cfg = new Configuration(Configuration.VERSION_2_3_30);
cfg.setClassForTemplateLoading(getClass(), "/templates"); // 指定模板路径
// 创建数据模型
DocumentDataModel model = new DocumentDataModel();
model.put("outerCollection", data); // 将嵌套集合放入数据模型
// 使用XDocReport生成Word文档
XDocReport report = new XDocReport(cfg);
String templateName = "your_template_name.docx"; // 模板文件名
InputStream inputStream = Resources.getResourceAsStream(templateName);
OutputStream outputStream = new FileOutputStream("output.docx");
report.generateDocument(inputStream, model, outputStream);
inputStream.close(); // 关闭输入流
outputStream.close(); // 关闭输出流
}
```
在上述代码中,`Resources.getResourceAsStream()`需要替换为你实际的资源获取方式,如从类路径读取。
阅读全文
相关推荐

















