我想删除我已经使用Apache POI XWPF产生的.docx文档段落。 我可以使用HWPF下面为.doc word文档很容易做到这一点:
for (String paraCount : plcHoldrPargrafDletdLst) {
Paragraph ph = doc.getRange().getParagraph(Integer.parseInt(paraCount));
System.out.println("Deleted Paragraph Start & End: " + ph.getStartOffset() +" & " + ph.getEndOffset());
System.out.println("Deleted Paragraph Test: " + ph.text());
ph.delete();
}
我试图做同样的
doc.removeBodyElement(的Integer.parseInt(paraCount));
但unfortunatley不够成功的得到的结果,因为我想要的。 结果文件,我不能看到已删除的段落。 如何在XWPF accompolish类似功能的任何建议。
好吧,这个问题是有点老了,可能不再被需要的,但我只是找到比建议的一个不同的解决方案。
希望下面的代码将帮助别人有同样的问题
...
FileInputStream fis = new FileInputStream(fileName);
XWPFDocument doc = new XWPFDocument(fis);
fis.close();
// Find a paragraph with todelete text inside
XWPFParagraph toDelete = doc.getParagraphs().stream()
.filter(p -> StringUtils.equalsIgnoreCase("todelete", p.getParagraphText()))
.findFirst().orElse(null);
if (toDelete != null) {
doc.removeBodyElement(doc.getPosOfParagraph(toDelete));
OutputStream fos = new FileOutputStream(fileName);
doc.write(fos);
fos.close();
}
好像你真的无法从一个.docx文件中删除的段落。
什么,你应该能够做的就是消除段落的内容......所谓的Runs
。你可以用这一个尝试:
List<XWPFParagraph> paragraphs = doc.getParagraphs();
for (XWPFParagraph paragraph : paragraphs)
{
for (int i = 0; i < paragraph.getRuns().size(); i++)
{
paragraph.removeRun(i);
}
}
您还可以指定运行的第一款应除去如
paragraphs.get(23).getRuns().remove(17);
版权所有
// Remove all existing runs
removeRun(para, 0);
public static void removeRun(XWPFParagraph para, int depth)
{
if(depth > 10)
{
return;
}
int numberOfRuns = para.getRuns().size();
// Remove all existing runs
for(int i = 0; i < numberOfRuns; i++)
{
try
{
para.removeRun(numberOfRuns - i - 1);
}
catch(Exception e)
{
//e.printStackTrace();
}
}
if(para.getRuns().size() > 0)
{
removeRun(para, ++depth);
}
}
我相信你的问题是在回答这个问题。
当你的表里面,你需要使用的功能XWPFTableCell
代替XWPFDocument
:
cell.removeParagraph(cell.getParagraphs().indexOf(para));