如何使用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
我可以使用poi读取标题,但无法读取自动生成标题前的数字。
我想知道是否可以使用 poi
阅读它
恐怕你得自己计算了,下面是你可以在XWPFParagraph
object上使用的方法来提取你需要的数据:
XWPFParagraph#getNumLevelText() Returns 带占位符的编号文本
XWPFParagraph#getNumIlvl()Returns标题深度
XWPFParagraph#getNumFmt() Returns 格式或标题编号(十进制、罗马、小写字母、..)
您可以这样使用它们:
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.
在 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
我可以使用poi读取标题,但无法读取自动生成标题前的数字。
我想知道是否可以使用 poi
阅读它恐怕你得自己计算了,下面是你可以在XWPFParagraph
object上使用的方法来提取你需要的数据:
XWPFParagraph#getNumLevelText() Returns 带占位符的编号文本
XWPFParagraph#getNumIlvl()Returns标题深度
XWPFParagraph#getNumFmt() Returns 格式或标题编号(十进制、罗马、小写字母、..)
您可以这样使用它们:
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.