我正在使用RConnect写入工作簿。功能如下 我收到错误消息
错误:POIXMLException(Java):java.lang.reflect.InvocationTargetException
我的research,[2]到目前为止主题已经说过,这基本上意味着java机器没有足够的内存(我可能错了)
这上周没有任何问题,所以我很困惑为什么它突然变成文件没有改变的问题。它似乎在Load workbook the template workbook
文件大小为3MB 我的电脑有16 Gigs of memory
# Export it all to Excel
export_report <- function(mydf, startRow, Offset, myoutputTemplate, myoutput, mycomments) {
# Load workbook the template workbook
wb <- loadWorkbook(myoutputTemplate)
# write to the workbook the data frame
writeWorksheet(wb, mydf, sheet= "Analysis",
startRow=startRow, startCol=1, header=TRUE)
# write the analysis
writeWorksheet(wb, mycomments, sheet= "Analysis", header=FALSE,
startRow=startRow+Offset, startCol=1)
# Save the workbook
saveWorkbook(wb, myoutput)
}
我无法使用open.xlsx,因为它需要RTools(我认为)而且我的IT部门安装起来很慢。
我会采取任何人可以建议的替代方案
答案 0 :(得分:0)
我使用了一堆Excel库,这并不罕见。我根据经验(不是引擎盖下的代码)和对记忆的一些理解的解释如下:
Java在R之外运行,与r环境调用的大多数其他语言不同,它不会被R自动垃圾收集,因为R没有看到堆积在那里的尸体。
您的系统不会对其进行垃圾回收,因为它不是系统功能。因此,这些数据帧的多个副本会堆叠在分配给Java的内存中,并且您的脚本会变慢或崩溃。
我对此的回应是在每次加载写入和保存工作簿之后运行gc()
,或者在我使用Excel库重命名或重组工作表的任何时候(在我的情况下为XLconnect)。此外,第二个您不再需要工作空间中的Java本机对象,将其删除并再次收集垃圾。即使你没有崩溃,它也会加快对较大文件的处理速度。
我知道这是一个非常非技术性的解释,但它对我和我所在部门的人们使用这些包有用。试一试。