Мой R-скрипт должен выполнять множество операций открытия / записи / закрытия / открытия / чтения / закрытия в Excel, а посередине я использую пакет RODBC
. Кажется, есть проблема с odbcCloseAll
, которая не закрывает открытые соединения Excel через несколько раз.
Простой пример (надеюсь, воспроизводимый, и не только потому, что мой компьютер странный):
require(RODBC)
filename <- tempfile(fileext='.xls')
for(i in 1:100) {
xlsFile <- odbcConnectExcel(filename, readOnly=FALSE)
sqlSave(xlsFile, USArrests, rownames = FALSE)
odbcCloseAll()
xlsFile <- odbcConnectExcel(filename, readOnly=FALSE)
template <- sqlFetch(xlsFile, "USArrests")
odbcCloseAll()
file.remove(filename)
}
И в какой-то момент (около i = 50
в моем случае) цикл завершается с:
Error in sqlSave(xlsFile, USArrests, rownames = FALSE) :
table ‘USArrests’ already exists
In addition: Warning message:
In file.remove(filename) :
cannot remove file 'c:\DOCUME~1\user\LOCALS~1\Temp\RtmpSFDDiG\file43522f58.xls', reason 'Permission denied'
Проблема может быть легко решена с помощью odbcClose(xlsFile)
или любого другого пакета, связанного с Excel, но ради правильности мне интересно, что не так с odbcCloseAll
...