下面的代码允许我添加大写字母编号,它将字母 A. 添加到第一部分,但对于其余部分,它保留相同的字母 A。它不会创建连续的列表编号。我得到的结果如下:
A.这是第一部分
A.这是第二部分
我需要得到的是:
A.这是第一部分
B.这是第二部分
关于如何实现这一目标有什么想法吗?
列表列表 = document.getParagraphs();
CTAbstractNum cTAbstractNum = CTAbstractNum.Factory.newInstance();
CTLvl cTLvl = cTAbstractNum.addNewLvl();
cTLvl.addNewNumFmt().setVal(STNumberFormat.UPPER_LETTER);
cTLvl.addNewLvlText().setVal("A.");
cTLvl.addNewStart().setVal(BigInteger.valueOf(1));
XWPFAbstractNum abstractNum = new XWPFAbstractNum(cTAbstractNum);
XWPFNumbering numbering = document.createNumbering();
BigInteger abstractNumID = numbering.addAbstractNum(abstractNum);
BigInteger numID = numbering.addNum(abstractNumID);
for (XWPFParagraph paragraph : list) {
if (paragraph.getText().trim().contains("This is section number one")||
paragraph.getText().trim().contains("This is section number two") ){
System.out.println(paragraph.getText() + " " + list.indexOf(paragraph));
paragraph.setNumID(numID);
}
}
}
最佳答案
在 Hi, how can I restart numbering in java word apache poi?我提供了一个方法 BigInteger getNewDecimalNumberingId(XWPFDocument document, BigInteger AbstractNumID) 。在这个方法中
...
CTLvl cTLvl = cTAbstractNum.addNewLvl();
cTLvl.setIlvl(BigInteger.valueOf(0)); // set indent level 0
cTLvl.addNewNumFmt().setVal(STNumberFormat.DECIMAL);
cTLvl.addNewLvlText().setVal("%1.");
cTLvl.addNewStart().setVal(BigInteger.valueOf(1));
...
表示如下:向具有十进制数字格式和模式 %1.
的级别文本的抽象编号添加第一级别,从第一个可用数字开始。
其中的 %1.
是一个模式。它不是意味着1.
,而是%1
= 1级的下一个可用数字,后跟点.
。如果有更多级别,则在级别 2 中,lvlText
可能具有 val="%1.%2."
。这意味着 %1
= 级别 1 的当前编号,后跟点 .
,然后 %2
= 级别 2 的下一个可用编号,后跟点 .
.
相应的大写字母编号方法是:
BigInteger getNewUpperLetterNumberingId(XWPFDocument document, BigInteger abstractNumID) {
CTAbstractNum cTAbstractNum = CTAbstractNum.Factory.newInstance();
cTAbstractNum.setAbstractNumId(abstractNumID);
CTLvl cTLvl = cTAbstractNum.addNewLvl();
cTLvl.setIlvl(BigInteger.valueOf(0)); // set indent level 0
cTLvl.addNewNumFmt().setVal(STNumberFormat.UPPER_LETTER);
cTLvl.addNewLvlText().setVal("%1:");
cTLvl.addNewStart().setVal(BigInteger.valueOf(1));
XWPFAbstractNum abstractNum = new XWPFAbstractNum(cTAbstractNum);
XWPFNumbering numbering = document.createNumbering();
abstractNumID = numbering.addAbstractNum(abstractNum);
BigInteger numID = numbering.addNum(abstractNumID);
return numID;
}
您仅看到 cTLvl.addNewNumFmt().setVal(STNumberFormat.UPPER_LETTER);
已更改。 %1:
又是一个模式。现在,它意味着 %1
= 1 级的下一个可用字母,后跟冒号 :
。
关于java - Apache poi Java。我正在尝试添加 upper_letter 编号,但结果是所有部分都编号为 A,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60782708/