easypoi 实现word模板导出

特此非常致谢:easypoi实现word模板

基础的可以参考上文;

但是我的需求有一点点不一样。

这是我的模板:就是我的t.imgs 是个list 但是很难过的是easy poi 我弄了一天,我都没有弄出来嵌套list循环怎么输出显示,更难过的是我的imgs list 还是要显示图片。。。。。

我尝试过各种办法之后,我只能进行了重写。。。。。

我下面的代码 仅供参考,如果有大神有更好更直接的办法的话,欢迎留下方式!!感恩的心!

蓝色部分是我调用源码的部分,先进行了基础的模板渲染,保证其他字段都没有问题的情况下。

然后我把生成的document 再拿来重新的赋值。

重写的源码部分:(我研究了大概的流程)

复制代码
//由于我的方法是static 的 ,所以我在接下来这部分都加了static 直接调用了。
private static void parseThisRow(List<XWPFTableCell> cells, XWPFTableRow row,Map<String, Object> map) throws Exception {
        for(XWPFTableCell cell : cells) {
            parseAllParagraph(cell,cell.getParagraphs(),  row, map);
        }

    }
    private static void parseAllParagraph(XWPFTableCell cell,List<XWPFParagraph> paragraphs, XWPFTableRow row,Map<String, Object> map) throws Exception {
        int findex = 0 ;
        for(int i = 0; i < paragraphs.size(); ++i) {
            XWPFParagraph paragraph = (XWPFParagraph)paragraphs.get(i);
            List list = (List) PoiPublicUtil.getParamsValue("alarms", map);
            if (paragraph.getText().indexOf("[") == 0 && paragraph.getText().indexOf("]") == (paragraph.getText().length() -1)) { 
                parseThisParagraph(cell,paragraph, (Map<String, Object>)list.get(findex));
                findex++;
            }
        }
    }
    private static  void parseThisParagraph(XWPFTableCell cell,XWPFParagraph paragraph, Map<String, Object> map) throws Exception {
        XWPFRun currentRun = null;
        String currentText = "";
        Boolean isfinde = false;
        List<Integer> runIndex = new ArrayList();
//get(0) 的原因是:我发现之后的run 都是换行符 所以我只拿第一部分了。
        changeValues(paragraph, paragraph.getRuns().get(0), currentText, (List<ImageEntity>)map.get("imgs"));
    }

    private static  void changeValues(XWPFParagraph paragraph, XWPFRun currentRun, String currentText, List<ImageEntity> imgList) throws Exception {
        currentRun.setText("", 0);
        imgList.forEach((image->{
            ExcelMapParse.addAnImage(image,currentRun);
            currentRun.addTab();
            currentRun.addBreak();
        }));
    }

只是初步实现了这个结果。。。。

但是可能会隐藏着很多问题。。。

今天忙乎了一下午 百度了很久。。。

deepseek 也问了。。官网源码倒是没去问。我也没找到呐。。。。。

可能是我太菜了。。。。

跪求各位大神多多帮忙。

相关推荐
努力也学不会java1 小时前
【设计模式】 原型模式
java·设计模式·原型模式
方渐鸿1 小时前
【2024】k8s集群 图文详细 部署安装使用(两万字)
java·运维·容器·kubernetes·k8s·运维开发·持续部署
晓衣1 小时前
2025“獬豸杯”全国电子数据取证竞赛-k8s服务器取证wp
服务器·经验分享·程序人生·网络安全·容器·kubernetes·学习方法
学亮编程手记1 小时前
K8S v1.33 版本主要新特性介绍
java·容器·kubernetes
Haven-2 小时前
Java-面试八股文-JVM篇
java·jvm·面试
我真的是大笨蛋2 小时前
JVM调优总结
java·jvm·数据库·redis·缓存·性能优化·系统架构
wjs0403 小时前
Git常用的命令
java·git·gitlab
superlls3 小时前
(算法 哈希表)【LeetCode 349】两个数组的交集 思路笔记自留
java·数据结构·算法
田里的水稻3 小时前
C++_队列编码实例,从末端添加对象,同时把头部的对象剔除掉,中的队列长度为设置长度NUM_OBJ
java·c++·算法
2301_794333914 小时前
实验室服务器配置|通过Docker实现Linux系统多用户隔离与安全防控
linux·服务器·docker·实验室