使用XLConnect写入MS Excel工作表时的R NoSuchMethodError(Java)

时间:2017-06-28 16:00:38

标签: java r excel xlconnect

我有一个预先格式化的Microsoft Excel工作簿,我将其用作模板。然后我想将我的data.table粘贴到R的工作簿中,使列标题和格式保持不变。

使用包XLConnect:

这应该是可行的
# Load library    
library(XLConnect)

# Load pre-formatted MS Excel workbook
wb <- loadWorkbook("Myworkbook.xlsx")

# Write data.table to existing worksheet excluding column names:    
writeWorksheet(wb, mydt, sheet = "Datasheet1", startRow = 3, startCol = 1, header = FALSE)

# Save the data to the workbook    
saveWorkbook(wb)

但是,当我运行这个时,我得到以下java错误:

Error: NoSuchMethodError (Java): org.apache.poi.ss.usermodel.Cell.setCellType(Lorg/apache/poi/ss/usermodel/CellType;)V

我使用R版本3.4.0与RStudio版本1.0.143与XLConnect_0.2-13和rJava_0.9-8,Java版本是Windows 8操作系统上的Java 8 Update 66(64位)使用Microsoft Office 2010.

任何关于为什么这可能不起作用的想法都会非常感激 - 我可以从头开始创建工作簿和工作表,因此看起来只是将数据附加到现有工作表会受到影响。

1 个答案:

答案 0 :(得分:4)

我也有同样的问题,发现在XLConnect的0.2-13版本中有一个转向Apache POI 3.16。

类似地,Apache Commons项目被添加到它的依赖包XLConnectJars中 - 这是我认为问题可能存在的地方,因为这里可能有一些功能弃用。

此问题已提出,但未在XLConnect GitHub页面上解决。

编辑:现在已在XLConnect GitHub页面上解释了此问题。简而言之,最新版本的XLConnect无法与xlsx软件包一起运行,因为它们使用的是不同版本的Apache POI。您可以找到帖子here。在对xlsx进行更新之前,以下解决方案仍可用于快速修复。

由于我已经有了用XLConnect编写的工作代码,并且由于时间限制在openxlsx中重写脚本,我发现降级到XLConnect / XLConnectJars版本0.2-12修复了这个问题。

我发现这样做的最快方法是卸载XLConnect和XLConnectJars,然后运行以下命令:

#Assuming devtools is already installed
library(devtools)

install_version("XLConnectJars", version = "0.2-12", repos = "http://cran.us.r-project.org") 
install_version("XLConnect", version = "0.2-12", repos = "http://cran.us.r-project.org")`