已使用 Apache POI (5.2.5) 阅读 docx,并希望枚举 MS WORD docx 中的所有样式(不仅是使用的样式)。
XWPFStyles styles = document.getStyles();
好的,有样式了。我还可以输出样式数量(在我的例子中为 79):
System.out.println("Number of styles: "+styles.getNumberOfStyles());
好的,有很多款式。有没有机会获得一个数组、一个列表或其他任何我可以用来“遍历”所有样式的东西? 预先感谢。
我阅读了大量的 Apache POI 文档,但没有找到任何“保持简单和愚蠢”的解决方案。
由于 Apache POI 是开源的,您可以查看 XWPFStyles.java 的源代码。在那里你会发现一个
private final List<XWPFStyle>
。这用于获取样式数量:
public int getNumberOfStyles() {
return listStyle.size();
}
但是,没有方法可以迭代这个列表。
所以我看到的唯一可能性是使用反射:
import java.io.FileInputStream;
import org.apache.poi.xwpf.usermodel.*;
import java.util.List;
public class XWPFGetStyles {
public static void main(String[] args) throws Exception {
try ( FileInputStream in = new FileInputStream("./WordDocument.docx");
) {
XWPFDocument document = new XWPFDocument(in);
XWPFStyles styles = document.getStyles();
System.out.println(styles.getNumberOfStyles());
java.lang.reflect.Field _listStyle = XWPFStyles.class.getDeclaredField("listStyle");
_listStyle.setAccessible(true);
@SuppressWarnings("unchecked")
List<XWPFStyle> listStyle = (List<XWPFStyle>)_listStyle.get(styles);
for (XWPFStyle style : listStyle) {
System.out.println(style);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}