【发布时间】:2020-05-24 01:42:02
【问题描述】:
我正在尝试将 Rstudio 中的 R dataframe 插入到已经存在的 Excel 工作表中,而不会覆盖整个文件。我已经尝试过this 解决方案,但是指令loadWorkbook 给了我这个错误:
Error in .jcall("RJavaTools", "Ljava/lang/Object;", "invokeMethod", cl, : org.apache.poi.POIXMLException: java.lang.reflect.InvocationTargetException
有了这个回溯:
6.
stop(structure(list(message = "org.apache.poi.POIXMLException: java.lang.reflect.InvocationTargetException", call = .jcall("RJavaTools", "Ljava/lang/Object;", "invokeMethod", cl, .jcast(if (inherits(o, "jobjRef") || inherits(o, "jarrayRef")) o else cl, "java/lang/Object"), .jnew("java/lang/String", ...
5.
.jcheck(silent = FALSE)
4.
.jcall("RJavaTools", "Ljava/lang/Object;", "invokeMethod", cl, .jcast(if (inherits(o, "jobjRef") || inherits(o, "jarrayRef")) o else cl, "java/lang/Object"), .jnew("java/lang/String", method), j_p, j_pc, use.true.class = TRUE, evalString = simplify, ...
3.
.jrcall(x, name, ...)
2.
wbFactory$create(inputStream)
1.
loadWorkbook("Recon Metro Fuels JR B VN Ene 2019 V2.xlsx")
我正在使用这些库:
-
pdftools,用于从 PDF 中提取文本。 -
openxlsx&xlsx,用于 Excel 操作。 -
dplyr,用于%>%运算符。
有关 Excel 的更多信息,大小:29MB,是 .xlsx 文件格式。
这是我如何做的代码:
#load exel file
old_data<- readWorkbook("Recon Metro Fuels JR B VN Ene 2019 V2.xlsx", sheet = "Raw BAC VN CON FIREFOX");
#Combines the Excel sheet with the new updated sheet
new_data<-bind_rows(old_data, pdf_refined);
wb<- loadWorkbook("Recon Metro Fuels JR B VN Ene 2019 V2.xlsx")
是什么导致了这个错误? 还有其他方法吗?
【问题讨论】:
-
您使用哪个软件包来处理 excel 文件?错误中提到 java 让我觉得它是
XLConnect,这对于它的 java 依赖有点臭名昭著......我最终放弃了它并切换到openxlsx。永不回头(除非有一次我不得不处理“.xls”文件……) -
@dario 我正在使用 openxlsx 和 xlsx 来处理我的 Excel 文件。我还用我正在使用的库更新了帖子。
-
那么它必须是'xlsx'。我建议避免使用它并仅使用
openxlsx。您加载两个库“xlsx”和“openxlsx”是否有原因? -
@dario 谢谢,我不记得我为什么使用那个库,删除它解决了错误。但是rsutdio又报错了,不知道是更新问题还是把问题写在cmets中。