在 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
对象上使用的方法来提取您需要的数据:
XWPFParagraph#getNumLevelText()返回带有占位符的编号文本
XWPFParagraph#getNumIlvl()返回标题的深度
XWPFParagraph#getNumFmt()返回格式或标题编号(十进制、罗马数字、小写字母、..)
您可以这样使用它们:
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.
关于java - 如何使用 POI 在 Word 中读取标题编号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49868902/