繁体   English   中英

Apache poi Java。 我正在尝试添加 upper_letter 编号,但结果是所有部分都编号为 A

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM