R NoSuchMethodError (Java) 写入 MS Excel 使用 XLConnect 工作 sheet

R NoSuchMethodError (Java) when writing to MS Excel work sheet with XLConnect

我有一个 pre-formatted 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 版本是 Java 8 Windows 7 OS 使用 Microsoft Office 2010 更新 66(64 位)。

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

我也遇到了同样的问题,发现在 XLConnect 的 0.2-13 版中有一个迁移到 Apache POI 3.16。

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

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

编辑:这个问题现在已经在 XLConnect GitHub 页面上得到了解释。简而言之,最新版本的 XLConnect 不能 运行 与 xlsx 包一起使用,因为它们使用不同版本的 Apache POI。你可以找到 post 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")`