пакет excel.link не работает с R версии 4.0.2 (2020-06-22) — «Снова запускается»

#r

#r

Вопрос:

Я не могу использовать пакет excel.link с R версии 4.0.2 (2020-06-22) — «Снова запускается». Код, который я пытаюсь использовать, работал в предыдущих версиях. Кто-нибудь еще сталкивался с такой же проблемой и нашел способ ее исправить?

Например, следующий код использовался для открытия нового листа Excel с набором данных iris в нем

 ExcelPrint = function(rObject) {
  library(excel.link)
  myExcelProcess = COMCreate("Excel.Application")
  xl.workbook.add()
  excelRange = myExcelProcess[["ActiveSheet"]]$Range("A1:A1")
  xl.write(rObject, excelRange, row.names = FALSE)
} 

ExcelPrint(iris)
  

Комментарии:

1. Я попробовал это и не получил ошибку в моей R консоли. Мой R сеанс прерван с неустранимой ошибкой. Что происходит при запуске этого кода?

2. Пробовали ли вы альтернативные варианты обработки, такие как openxlsx ?

3. Бен Норрис, я обращаюсь «К Даниэле Хазовой, которая постоянно вдохновляет меня… Ошибка: недопустимая строка класса Дополнительно: Предупреждающее сообщение: В getCOMInstance (name, force = TRUE, silent = TRUE) : Ошибка: недопустимая строка класса «но поведение, которое вы получили, произошло на моем другом компьютере

4. Аллан Кэмерон, чего я пытаюсь достичь, так это возможности открыть Excel с моим набором данных в нем. Я не знаю, как это сделать с openxlsx. Я был бы благодарен, если бы вы указали способ.

Ответ №1:

В итоге я использовал следующую функцию. Он использует пакет openxlsx, как упоминал Аллан в комментариях, и записывает файл xlsx на диск, прежде чем использовать команду командной строки для его открытия.

 library(openxlsx)

quickExcelPrint=function(rObject,filename="r_excel_tmp.xlsx",overwrite=FALSE){
  if (filename %in% dir() amp; overwrite==FALSE){
    stop(paste0("Excel filename ",filename," already exists! Please either specify another filename or set overwrite to TRUE."))
  } else{
    write.xlsx(rObject, filename)
    shell(paste0("start excel ",filename))
  }
}
  

Пример

 quickExcelPrint(iris,overwrite = T)