在 XWPFDocument 中的任意位置插入一个 XWPFParagraph。

6

请问有没有一种方法可以在一个已经填充好内容的段落文档(XWPFDocument)中插入另一个段落(XWPFParagraph)呢?

虽然XWPFDocument.setParagraph()方法可以将已经存在的段落替换为另一个段落,但我并不知道如何在文档的特定位置插入新的段落,而不是在结尾处使用XWPFDocument.createParagraph()。

3个回答

9
我找到了一个解决方案。 XWPFDocument 有一个不太好的方法叫做 insertNewParagraph(org.apache.xmlbeans.XmlCursor cursor)。正如你所看到的,这个方法传递了来自 xmlbeans 库的 XmlCursor。然后我们可以这样做:
XmlCursor cursor = par.getCTP().newCursor();
XWPFParagraph new_par = doc.insertNewParagraph(cursor);
new_par.createRun().setText("Stupid text");

Par是XWPFDocument文档中的XWPFParagraph。在这个片段中插入(new_par)的新段落将会在XmlCursor指向的XmlObject之前插入。

希望这可以帮助一些人。


9
我尝试过这个,但是insertNewParagraph返回的段落始终为空。 - Justin Skiles
Java运行时环境检测到致命错误:在运行代码时。仍在调试中,有任何想法吗?没有其他关于为什么出现此错误的信息。 - Dipanshu Verma
对于那些通过“insertNewParagraph”获得NULL的人,请确保“par”是从“doc”中获取的。 insertNewParagraph将检查光标是否属于给定文档,如果不属于,则返回null。 - beatrice

6

我也花了几个小时来解决这个问题。我遇到了上面评论中提到的同样的问题。对我有效的方法是:

document.getParagraphsIterator() 中找到要插入的正确段落后,我必须使用以下代码

XmlCursor cur = para.getCTP().newCursor();
cur.toNextSibling();

能够执行doc.insertNewParagraph(cur)

据我理解,我的下一个错误是尝试在光标位置插入多个段落。为了使其工作,我必须在插入后添加cursor.toNextToken();


谢谢!为我做了这个……甚至在手机上也可以。 - cljk

0

您可以使用

xwpfDoc.setParagraph(XWPFParagraph paragraph, int pos)

在特定位置插入段落

有关详细信息,请参见链接


这需要调用 xwpfDoc.createParagraph(),否则会抛出错误。 - Matteo Gaggiano
那只是个问题。 - Akshatha S R

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接