当前位置: 首页 > 知识库问答 >
问题:

在XWPFDocument中插入段落

向弘懿
2023-03-14

我正在对一个。docx文件进行搜索和替换,在某些情况下,替换文本包含换行符。我已经尝试了几种技巧。第一种方法是将替换文本分成几行,并执行以下操作:

run.setText(lines[0], 0);
for(int x=1; x<lines.length; x++) {
    run.addCarriageReturn();
    run.setText(lines[x]);
}

结果全部运行在单行上。

private void replaceParagraph(XWPFParagraph p, String[] paragraphs) {
    if (p != null) {
        XWPFDocument doc = p.getDocument();
        for (int i = 0; i < paragraphs.length; i++) {
            XmlCursor cursor = p.getCTP().newCursor();
            XWPFParagraph newP = doc.insertNewParagraph(cursor);
            newP.setAlignment(p.getAlignment());
            newP.getCTP().insertNewR(0).insertNewT(0).setStringValue(paragraphs[i]);
            newP.setNumID(p.getNumID());
        }
        doc.removeBodyElement(doc.getPosOfParagraph(p));
    }
}

在光标位置添加一个新段落。光标必须位于文档主体子元素的XMLCursor.TokentYPE.Start标记上。完成此方法后,作为参数传递的游标将指向新插入段落的XMLCursor.TokentYPE.End。

我已经仔细检查了doc!=null,我想不出任何其他可能返回null的原因。有什么建议吗?

共有1个答案

章盛
2023-03-14

这最终解决了这个问题。

private void createParagraphs(XWPFParagraph p, String[] paragraphs) {
    if (p != null) {
        XWPFDocument doc = p.getDocument();
        XmlCursor cursor = p.getCTP().newCursor();
        for (int i = 0; i < paragraphs.length; i++) {
            XWPFParagraph newP = doc.createParagraph();
            newP.getCTP().setPPr(p.getCTP().getPPr());
            XWPFRun newR = newP.createRun();
            newR.getCTR().setRPr(p.getRuns().get(0).getCTR().getRPr());
            newR.setText(paragraphs[i]);
            XmlCursor c2 = newP.getCTP().newCursor();
            c2.moveXml(cursor);
            c2.dispose();
        }
        cursor.removeXml(); // Removes replacement text paragraph
        cursor.dispose();
    }
}
 类似资料:
  • 我正在使用apache poi 3.8将值写入word模板。我将word文件中的特定字符串(键)替换为所需的值,例如,word文档中有一个包含键%entry1%的段落,我想将其替换为“entry text line1\n new line”。在我的实现中,所有被替换的键和值都存储在一个地图中。 HWPFDocument的代码为: 这段代码工作得很好,我只需要在输入字符串中添加\n作为换行符。但是,

  • 我有一个有角度的表格,其中行选择: (请参阅我有值的输入字段) 当我双击Nan值时,我得到: 全码:https://pastebin.com/hnvj56pz 我使用这段代码双击表行并将一个值插入输入字段: 当我用Selenium双击时,表格行变成输入字段。但当我尝试输入某个值时,由于id是动态生成的,因此找不到id。 如何获取输入文件的父级和插入值? 你知道如何解决这个问题吗?

  • 我正在用viewpager和fragments制作一个adroid应用程序。我想做一个选项,动态地向寻呼机添加或删除片段页面。我有一个定制的碎片页面编辑器: 我可以删除任何片段除了0.当我试图删除它我得到了一个NullPointerExc农田上的通知yDataSetChanged();或在pager.set适配器(这);如果我注释了通知。 当我尝试插入一个新页面时,我也得到了一个NullPoint

  • 我正在设计Selenium WebDriver框架工作中的测试,我想在登录框中的字段中插入文本。 这里是一个网站www.fitandjump-widzew.pl点击右上角的“zaloguj”按钮后,出现登录框。我想在电子邮件输入字段中插入文本。 下面是我的代码: 在执行之后,我得到这个错误:org.openqa.selenium.ElementNotVisibleException:元素不可见 有

  • 问题内容: 我想表达以下声明: 子选择返回一行,其中包含两列(和),需要将其插入到target中。这样做的原因是,是的主键。是指(外键)。 这可能吗? 问题答案: 我不确定首先使用哪种SQL方言是否可能通过,但是您当然可以使用以下方式表达这种查询: 或与jOOQ

  • 我正在尝试用Thymeleaf创建纯文本和HTML的电子邮件模板。因为我不想复制公共部分,所以我想单独定义这些部分,并将它们插入到更具体的模板中。 它适用于超文本标记语言,但对于普通文本变量中的公共部分不被替换: 超文本标记语言 > 具体的html 纯文本 > header.txt 页脚。文本 具体的文本 后果 对于超文本标记语言,这一切都很好,但是对于纯文本版本,插入的模板中的变量不会被替换: