我希望能够从 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 的任何想法,或者我在这里还有其他问题吗?