导出数据到word

324 阅读1分钟

在网上查阅了下资料,发现了一个比较好用的框架,如下

<!--        poi-tl-->
<dependency>
    <groupId>com.deepoove</groupId>
    <artifactId>poi-tl</artifactId>
    <version>1.11.0</version>
</dependency>

市面上的解决方案如下,方案介绍来源于官网

方案移植性功能性易用性
Poi-tlJava跨平台Word模板引擎,基于Apache POI,提供更友好的API低代码,准备文档模板和数据即可
Apache POIJava跨平台Apache项目,封装了常见的文档操作,也可以操作底层XML结构文档不全,这里有一个教程:Apache POI Word快速入门
FreemarkerXML跨平台仅支持文本,很大的局限性不推荐,XML结构的代码几乎无法维护
OpenOffice部署OpenOffice,移植性较差-需要了解OpenOffice的API
HTML浏览器导出依赖浏览器的实现,移植性较差HTML不能很好的兼容Word的格式,样式糟糕-
Jacob、winlibWindows平台-复杂,完全不推荐使用

根据业务需求导出数据到word循环输出,快速入门代码 1.准备相关的word模版 2.根据官网左侧菜单进行选择,文档详细简单 3.完成demo,网上demo并不清晰,这里提供了一个通用的循环输出列表demo

public static Boolean listToWord(String tagName, String templateName, String savePath, List<Object> collection){
    //`LoopRowTableRenderPolicy` 是一个特定场景的插件,根据集合数据循环表格行
    LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy();
    Configure config = Configure.builder().bind(tagName, policy).build();

    InputStream templateFile = ExportWordUtil.class.getClassLoader().getResourceAsStream(templateName);
    Map<String,Object> map = new HashMap();
    map.put(tagName, collection);

    XWPFTemplate template = XWPFTemplate.compile(templateFile,config).render(map);
    try {
        FileOutputStream outputStream = new FileOutputStream(savePath);
        template.write(outputStream);
        outputStream.flush();
        outputStream.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return true;
}

Poi-tl Documentation (deepoove.com)