Java 如何在R中加载ApachePOI库?

Java 如何在R中加载ApachePOI库?,java,r,apache-poi,Java,R,Apache Poi,我试图将word文件读入R,以便对其进行文本解析。经过一段时间的研究,我发现ApachePOI是我的选择,因为它似乎是处理不同单词格式最灵活的w.r.t 我试着遵循R包xlsx'或commonJavaJars和xlsxjars`的做法。不幸的是,我无法创建几行类似的R。 例如: 我得到的只是一个java.lang.ClassNotFoundException。除了Excel相关软件包之外,还应提供POI软件包,因为xlsxjars的源代码中有一个POI-3.9-20121203.jar,其中包含

我试图将word文件读入R,以便对其进行文本解析。经过一段时间的研究,我发现ApachePOI是我的选择,因为它似乎是处理不同单词格式最灵活的w.r.t

我试着遵循R包
xlsx'或
commonJavaJars
xlsxjars`的做法。不幸的是,我无法创建几行类似的R。
例如:

我得到的只是一个
java.lang.ClassNotFoundException
。除了Excel相关软件包之外,还应提供POI软件包,因为
xlsxjars
的源代码中有一个
POI-3.9-20121203.jar
,其中包含.jars
xlsx
取决于

还尝试使用包
commonJavaJars
并运行该函数

装货罐(“poi”)

没有错误,但后续调用未成功。有人能让我从这里开始吗

编辑: 我显然错过了一个包裹。我可以立即将额外的
jar加载到我的R会话中吗?或者我必须编译一个包来添加新的jar吗?

apachepoi提供。如果你看一下,你会发现要使用HWPF,你需要主poi jar和poi scratchpad jar

因此,假设您坚持使用poi-3.9(并且没有使用最新版本,即编写时的3.10 beta 2),您需要在类路径上列出
poi-3.9-20121203.jar
poi-scratchpad-3.9-20121203.jar
。一旦两者都存在,您就可以使用HWPF了

由于您使用的是R,如果您决定使用,您应该参考,以了解有关如何一次性加载所需所有jar的详细信息

或者,如果您想跳过CommonJavaJAR并手动完成所有操作,那么下面的代码片段将展示如何从R.Note中提取Word文档中的文本。注意,这并不漂亮,因为R Java接口的级别非常低

library(rJava)
.jinit()
.jaddClassPath("poi-3.10-beta3-20131022.jar")
.jaddClassPath("poi-scratchpad-3.10-beta3-20131022.jar")

inputStream <- .jnew("java/io/FileInputStream", path.expand("test.doc"))
wdoc <- .jnew("org/apache/poi/hwpf/HWPFDocument", 
              .jcast(inputStream,"java/io/InputStream"))
wext <- .jnew("org/apache/poi/hwpf/extractor/WordExtractor", wdoc)

text <- .jcall(wext, "Ljava/lang/String;", "getText")
print(text)
库(rJava)
.jinit()
.jaddClassPath(“poi-3.10-beta3-20131022.jar”)
.jaddClassPath(“poi-scratchpad-3.10-beta3-20131022.jar”)

inputStream这样您就可以使用poi而不是word文档来读取xlsx了?我可以使用使用poi的r软件包xlsx来读取xlsx。所以,是的,我能够使用POI读取xlsx,但我不明白为什么它不适用于HWPF文档。相信我有一些我看不到的愚蠢错误。谢谢,我以为我遗漏了什么。你在跟一个java新手说话。如何在R中加载附加的
poi草稿行
loadJars
函数似乎并不经常使用。我不明白像xlsx这样的R包是如何装入罐子的。确实有一个jar文件夹,但它们是否只有在编译包时才提供给R?我必须构建一个包还是可以在会话中立即加载JAR?
loadJars(“poi-3.10”)
可以正常工作,但
。jnew(“org/apache/poi/hwpf/HWPFDocument”)
会再次返回一个未找到的异常。对于hwpf,您需要poi xxx和poi草稿行xxx,正如答案中所解释的那样……好吧,看来我至少已经做到了例外更改:
loadJars(“poi”)
loadJars(“poi scratchpad”)和.jnew(“org/apache/poi/hwpf/HWPFDocument”)`导致java.lang.NoClassDefFoundError:org/apache/poi/poidocument现在也可以为我工作了,非常感谢您的耐心。低级别在这里很好,它比完全未记录的
loadJars
透明得多。很高兴跳过它。主要问题是
.jaddClassPath
没有提供任何反馈,因此我不知道加载了什么。与.doc的解决方案类似,但建议使用.docx的XML R包
wdoc <- .jnew("org/apache/poi/hwpf/HWPFDocument")
library(rJava)
.jinit()
.jaddClassPath("poi-3.10-beta3-20131022.jar")
.jaddClassPath("poi-scratchpad-3.10-beta3-20131022.jar")

inputStream <- .jnew("java/io/FileInputStream", path.expand("test.doc"))
wdoc <- .jnew("org/apache/poi/hwpf/HWPFDocument", 
              .jcast(inputStream,"java/io/InputStream"))
wext <- .jnew("org/apache/poi/hwpf/extractor/WordExtractor", wdoc)

text <- .jcall(wext, "Ljava/lang/String;", "getText")
print(text)