[英]Apache poi Java. I am trying to add upper_letter numbering, however the result is that all sections get numbering A
下面的代码允许我添加大写字母编号,它将字母 A. 添加到第一部分,但对于其余部分,它保持相同的字母 A。它不会创建连续的列表编号。 我得到的是以下内容:
A. 这是第一节
A. 这是第二节
我需要得到的是:
A. 这是第一节
B. 这是第二节
关于如何实现这一目标的任何想法?
List list = 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);
}
}
}
在嗨,我如何在 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
=下一个可用的号码,然后点1级.
. 如果有更多级别,那么在级别 2 中, lvlText
可能有val="%1.%2."
. 这意味着%1
= %1
级的当前数字,后跟 dot .
,然后是%2
= 级别 2 的下一个可用数字,然后是 dot .
.
大写字母编号的相应方法是:
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 的下一个可用字母后跟冒号:
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.