目前,我正在尝试实现this question:答案中给出的代码
CTSheetView view = sheet.getCTWorksheet().getSheetViews().getSheetViewArray(0);
view.setView(STSheetViewType.PAGE_LAYOUT);
但是poi-ooxml-schemas(版本3.14)JAR文件不包含类STSheetViewType。我研究了poi-ooxml-schemas JAR文件(使用7ZIP),发现路径中存在类文件STSheetViewType $ Enum.class:
org.openxmlformats.schemas.spreadsheetml.x2006.main.STSheetViewType $ Enum.class
但是(如果我没记错的话),“ $”表示内部/嵌套类,这意味着STSheetViewType枚举被封装在另一个类中。我在较旧版本的poi-ooxml-schemas(版本1.1)here中检查了STSheetViewType类的文档,发现该类STSheetViewType包含一个内部Enum STSheetViewType.Enum。
我从Eclipse中收到的错误似乎也证实了这一点。使用上面显示的代码时出现这些错误:
“ STSheetViewType无法解析为变量”
“无法解析类型org.openxmlformats.schemas.spreadsheetml.x2006.main.STSheetViewType。它是从所需的.class文件中间接引用的”
这进一步使我相信STSheetViewType.Enum缺少其父STSheetViewType类文件。但为什么?我检查了有关poi-ooxml-schemas-3.14新版本的文档,发现变更日志中未提及STSheetViewType。我已经为POI下载了几次zip二进制文件,以确保我的下载没有错误,甚至下载了源代码并尝试构建JAR,但每次都缺少类文件。
我发现在另一个Jar文件here中保存了具有相同功能的类STSheetViewType,但是我似乎无法正确导入该类。这样的事情有可能吗?还是类文件必须随poi-ooxml-schemas-3.14 JAR文件一起提供?
最终,我想了解如何使以上代码与poi-ooxml-schemas-3.14 JAR的当前版本兼容。任何信息或见解,将不胜感激。
最佳答案
正如@AxelRichter和FAQ指出的那样,Apache POI 3.14及更高版本使用了ooxml-schemas-1.3.jar中的类的子集。您需要获取该jar文件并将其包含在您的类路径中,而不是poi-ooxml-schemas-3.14.jar。 POI仅提供其所需的ooxml模式类。当您开始直接在自己的代码中调用ooxml架构类时,很可能必须获取具有所有ooxml架构类的完整jar,才能避免此类问题。您可以从Maven Central获取罐子:
http://central.maven.org/maven2/org/apache/poi/ooxml-schemas/1.3/
另请参见http://poi.apache.org/faq.html#faq-N10025的FAQ条目