如何使用POI读取Word中的标题编号

how to read the title's number in Word using POI

Word 文档中,结构如下:

1  Title 1
   1.1  title 1.1
   1.2  title 1.2
        1.2.1  title 1.2.1
   1.3  title 1.3

我可以使用读取标题,但无法读取自动生成标题前的数字。

我想知道是否可以使用

阅读它

恐怕你得自己计算了,下面是你可以在XWPFParagraphobject上使用的方法来提取你需要的数据:

您可以这样使用它们:

for (XWPFParagraph paragraph : paragraphList) {
    System.out.println("text: "+paragraph.getNumLevelText());
    System.out.println("depth: "+paragraph.getNumIlvl());
    System.out.println("format: "+paragraph.getNumFmt());
}

我试过这个文件:

它输出:

text: %1.
depth: 0
format: decimal

text: %1.%2.
depth: 1
format: decimal

text: %1.%2.
depth: 1
format: decimal

text: %1.%2.%3.
depth: 2
format: decimal

text: %1.%2.
depth: 1
format: decimal

因此,您将从那里了解每个标题的格式。你需要自己评估一下。

编辑

这可能适合您。因为你只有小数,所以这是一个简单的例子。

int[] levelCurrentValues = new int[] {0,0,0};

for (XWPFParagraph paragraph : paragraphList) {
    String levelText = paragraph.getNumLevelText();
    BigInteger levelDepth = paragraph.getNumIlvl();
    String levelFormat = paragraph.getNumFmt();
    System.out.println("text: "+levelText);
    System.out.println("depth: "+levelDepth);
    System.out.println("format: "+levelFormat);

    if(levelText!=null) {
        levelCurrentValues[levelDepth.intValue()] += 1;

        levelText = levelText.replace("%1", "" + levelCurrentValues[0]);
        levelText = levelText.replace("%2", "" + levelCurrentValues[1]);
        levelText = levelText.replace("%3", "" + levelCurrentValues[2]);
        System.out.println(levelText);
        System.out.println("");
    }
}

当运行针对与上面相同的文件时,它输出

text: %1.
depth: 0
format: decimal
1.

text: %1.%2.
depth: 1
format: decimal
1.1.

text: %1.%2.
depth: 1
format: decimal
1.2.

text: %1.%2.%3.
depth: 2
format: decimal
1.2.1.

text: %1.%2.
depth: 1
format: decimal
1.3.