ApachePOIJava。我试图添加大写字母编号,但结果是所有部分都得到编号

ApachePOIJava。我试图添加大写字母编号,但结果是所有部分都得到编号,java,apache-poi,Java,Apache Poi,下面的代码允许我添加大写字母编号,它将字母A添加到第一部分,但对于其余部分,它保留相同的字母A。它不会创建连续的列表编号。我得到的是: 这是第一节 这是第二节 我需要得到的是: 这是第一节 这是第二节 关于如何实现这一点有什么想法吗 List=document.getparations() }在中,我提供了一个方法BigInteger getNewDecimalNumberingId(XWPFDocument文档,BigInteger abstractNumID)。用这种方法 ... CTL

下面的代码允许我添加大写字母编号,它将字母A添加到第一部分,但对于其余部分,它保留相同的字母A。它不会创建连续的列表编号。我得到的是:

这是第一节

这是第二节

我需要得到的是:

这是第一节

这是第二节

关于如何实现这一点有什么想法吗

List=document.getparations()

}

在中,我提供了一个方法
BigInteger getNewDecimalNumberingId(XWPFDocument文档,BigInteger abstractNumID)
。用这种方法

...
  CTLvl cTLvl = cTAbstractNum.addNewLvl();
  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.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_字母)已更改。
%1:
又是一种模式。现在它的意思是
%1
=级别1的下一个可用字母,后跟冒号

在中,我提供了一个方法
BigInteger getNewDecimalNumberingId(XWPFDocument文档,BigInteger abstractNumID)
。用这种方法

...
  CTLvl cTLvl = cTAbstractNum.addNewLvl();
  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.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_字母)已更改。
%1:
又是一种模式。现在它的意思是
%1
=级别1的下一个可用字母,后面跟冒号

谢谢Axel,通过更改以下内容,代码现在确实工作正常:cTLvl.addNewLvlText().setVal(“%1”);代码现在正在添加大写字母编号。还感谢您对%1的解释。感谢Axel,通过更改以下内容,代码现在确实可以正常工作:cTLvl.addNewLvlText().setVal(“%1”);代码现在正在添加大写字母编号。还感谢您对%1的解释。图案