我希望能够从 R 打开一个 excel 会话,写入它,然后从 R 关闭 excel 会话。虽然我可以在同一个函数中完成这一切,但我正在尝试概括用于清理 excel 的代码。但是,不知何故,当我通过传入 excel 对象从函数调用 gc() 时,它不会进行垃圾收集。下面是代码:
opentest<-function() {
excel<-comCreateObject("Excel.Application")
comSetProperty(excel,"Visible",T)
comSetProperty(excel,"DisplayAlerts",FALSE)
comSetProperty(excel, "SheetsInNewWorkbook", 1)
wb <- comGetProperty(excel, "Workbooks")
wb <- comInvoke(wb, "Add")
excel
}
cleanupexcel<-function(excelobj) {
comInvoke(excelobj,"Quit")
rm(excelobj, envir=globalenv())
eapply(env=globalenv(), gc)
}
通过以下对函数的调用:
excelobj<- opentest()
cleanupexcel(excelobj)
当我调用上面的两个函数时,我仍然可以在我的任务管理器中看到正在运行的 excel 会话。但是,如果我在从 cleanupexcel() 返回后调用 gc(),它会成功终止 excel 会话。
关于如何从通用函数中成功 gc 的任何想法,或者我在这里还有其他问题吗?