在R中使用XLConnect读取加密工作表时遇NoSuchMethodError错误求助
XLConnect读取加密Excel报错:NoSuchMethodError (Java)
问题描述
一直用XLConnect在R里读取带密码保护的Excel工作表,最近突然出现如下错误:
Error: NoSuchMethodError (Java): org.apache.xmlbeans.XmlCursor.close()V
我的R会话信息如下:
R version 4.2.2 (2022-10-31 ucrt) Platform: x86_64-w64-mingw32/x64 (64-bit) Running under: Windows 10 x64 (build 19044) Matrix products: default locale: [1] LC_COLLATE=English_United States.utf8 LC_CTYPE=English_United States.utf8 LC_MONETARY=English_United States.utf8 [4] LC_NUMERIC=C LC_TIME=English_United States.utf8 attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] XLConnect_1.0.6 loaded via a namespace (and not attached): [1] compiler_4.2.2 fastmap_1.1.0 cli_3.4.1 htmltools_0.5.3 tools_4.2.2 rstudioapi_0.14 yaml_2.3.6 rmarkdown_2.17 [9] knitr_1.40 xfun_0.34 digest_0.6.30 rJava_1.0-6 rlang_1.0.6 evaluate_0.17 fortunes_1.5-4
已经更新过XLConnect包,但问题依然存在。
解决方法建议
这个错误本质是Java依赖库版本不兼容导致的——XLConnect依赖的Apache POI和XmlBeans库版本冲突,或是本地XmlBeans库缺少XmlCursor.close()方法(通常是版本过旧或文件损坏),可以尝试以下几种方案:
彻底重装XLConnect与rJava
先卸载现有包,重启R会话后重新安装:remove.packages(c("XLConnect", "rJava")) # 重启R后执行以下命令 install.packages("rJava") install.packages("XLConnect", type = "source")若安装源码版报错(需本地编译环境),可改用CRAN的二进制版本安装。
检查并调整Java环境
XLConnect对Java 8兼容性最佳,高版本Java易引发兼容问题。先查看当前Java版本:system("java -version")若版本高于8,可降级至Java 8,再重新配置R的Java路径:
library(rJava) Sys.setenv(JAVA_HOME = "你的Java 8安装路径,例如C:/Program Files/Java/jdk1.8.0_301") .jinit()更换加密Excel读取工具
若上述方法无效,可改用其他支持加密Excel的R包,比如openxlsx2:install.packages("openxlsx2") library(openxlsx2) wb <- read_xlsx("你的文件路径.xlsx", password = "你的密码")
内容的提问来源于stack exchange,提问作者bswan23
相关产品推荐
相关产品推荐

