poi Word 模板替换 表格内不换行问题



    public static void newLine3() throws Exception {
        String dot = "/data/tem/abd.docx";
        String t1 = "/data/tem/xyz.docx";
        String t2 = t1;//"/data/tem/xyz2.docx";
        Map<String, Object> datas = new HashMap<String, Object>() {
            {
                put("param1", "参数1的内容\n换行\nAAAAAAA\nbbbbbb\ncccccc\n中午好");
                //put("param2", "参数2的内容" + (char) 11 + "换行");
                put("param2", "参数2的内容\n换行");
                put("param3", "参数3的内容\n换行");
                put("param4", "参数4的内容\n换行");
                //本地图片
                //put("img1", new PictureRenderData(100, 120, "/git/1.jpg"));
            }
        };

        XWPFTemplate template = XWPFTemplate.compile(dot).render(datas);

        FileOutputStream out = new FileOutputStream(t1);
        template.write(out);
        out.flush();
        out.close();
        template.close();

        wordNewLine(t1, t2);
    }


    /**
     * 换行方法
     *
     * @param wordPath    word模板的地址
     * @param wordOutPath 换行后输出word的新地址
     */
    public static void wordNewLine(String wordPath, String wordOutPath) {
        //获取文档doc
        XWPFDocument doc = null;
        try {
            doc = new XWPFDocument(new FileInputStream(wordPath));
        } catch (IOException e) {
            e.printStackTrace();
        }
        //遍历所有表格
        for (XWPFTable table : doc.getTables()) {
            for (XWPFTableRow row : table.getRows()) {
                for (XWPFTableCell cell : row.getTableCells()) {
                    //单元格 : 直接cell.setText()只会把文字加在原有的后面,删除不了文字
                    addBreakInCell(cell);
                }
            }
        }
        try {
            doc.write(new FileOutputStream(wordOutPath));
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    /**
     * 匹配单元格内容\n 替换为换行
     *
     * @param cell
     */
     private static void addBreakInCell(XWPFTableCell cell) {
        String cell_s = cell.getText();

        if (cell_s != null) {
            System.out.println(cell_s);
            if (cell_s.contains("\n")) {
                System.out.println("------------------------------> you n"); 

                for (XWPFParagraph paragraph : cell.getParagraphs()) {
                    paragraph.setAlignment(ParagraphAlignment.LEFT);
                    for (XWPFRun run : paragraph.getRuns()) {
                        //String runs = run.toString();
                        String runs = run.text();
                        if (runs.contains("\n")) {
                            String[] lines = runs.split("\n");
                            if (lines.length > 0) {
                                run.setText("", 0);  //必须的  //清空原先文本,使用换行后的新文本
                                run.setText(lines[0], 0);
                                for (int i = 1; i < lines.length; i++) {
                                    run.setText("", i); //必须的  //清空原先文本,使用换行后的新文本
                                    run.addBreak();
                                    run.setText(lines[i]);
                                }
                            }else{
                                run.addBreak();
                            }
                        }
                    }
                }
            }
        }
    }

参考  https://www.cnblogs.com/nisir/articles/15912567.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值