Apache POI Java. Estoy tratando de añadir upper_letter numeración, sin embargo, el resultado es que todas las secciones consiguen numeración Un

Joe:

el código de abajo me permite agregar numeración letra mayúscula, se añade la letra A. de la primera sección, pero para las secciones restantes se mantiene la misma letra A. No crea la lista de numeración continua. Lo que se ve es la siguiente:

A. Este es el número de sección uno

A. Esta es la sección de número dos

Lo que necesita conseguir es:

A. Este es el número de sección uno

B. Esta es la sección de número dos

alguna idea sobre cómo lograr esto?

Lista 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);


    }

}

}

Axel Richter:

En Hola, ¿cómo puedo reiniciar la numeración de palabra java Apache POI? I Haave proporciona un método BigInteger getNewDecimalNumberingId(XWPFDocument document, BigInteger abstractNumID). En este método

...
  CTLvl cTLvl = cTAbstractNum.addNewLvl();
  cTLvl.addNewNumFmt().setVal(STNumberFormat.DECIMAL);
  cTLvl.addNewLvlText().setVal("%1.");
  cTLvl.addNewStart().setVal(BigInteger.valueOf(1));
...

significa el folowing: Añadir un primer nivel a la numeración que tiene formato de número decimal abstracto y un texto de nivel de patrón %1.comenzando por el primer número disponible.

Allí, el %1.es un patrón . Lo hace no media 1.pero %1= siguiente número disponible para el nivel 1, seguido de punto .. Si hubiera más niveles, a continuación, en el nivel 2, el lvlTextpodría tener val="%1.%2.". Eso significaría %1= número actual para el nivel 1, seguido por puntos ., seguido por %2= siguiente número disponible para el nivel 2, seguido de punto ..

El método correspondiente para la numeración carta superior sería la siguiente:

 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;
 }

Sólo se ve cTLvl.addNewNumFmt().setVal(STNumberFormat.UPPER_LETTER);que ha cambiado. El %1:es un patrón de nuevo. Ahora significa %1= siguiente letra disponible para el nivel 1 seguido de dos puntos :.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=341975&siteId=1
Recomendado
Clasificación