Я пытаюсь записать значения в Range
по вертикали, используя RDCOMClient
библиотеку. Поскольку RDCOMClient
позволяет писать код, очень похожий на VBA, я искал способы сделать это в VBA, а затем перевести на R.
Базовый код R для создания Excel:
app <- COMCreate("Excel.Application")
app[['Visible']] <- TRUE
workbook <- app$WorkBooks()$Open(path)
sheet <- workbook$Worksheets(sheet_name)
sheet$Activate()
Если бы мой Range
был горизонтальным, я мог бы просто написать его как:
VBA
Range("A1:C1").Value = Array(1,2,3)
R
range <- sheet$Range('A1:C1') range[['Value']] <- c(1,2,3)
Поскольку Range
является вертикальным, код будет следующим:
VBA
Range("A1:A3").Value = Application.Transpose(Array(1, 2, 3))
R
range <- sheet$Range('A1:A3') range[['Value']] <- app$Transpose(c(1,2,3))
Проблема в том, что "перевод" R для вертикального регистра не работает.
Печать range[['Value']]
в консоли показывает:
[[1]]
[[1]][[1]]
NULL
[[1]][[2]]
NULL
[[1]][[3]]
NULL
И app$Transpose(c(1,2,3))
показывает:
[[1]]
[[1]][[1]]
[1] 1
[[1]][[2]]
[1] 2
[[1]][[3]]
[1] 3
Почему он неправильно устанавливает значения? Как правильно это сделать?
Я также пробовал использовать матрицу:
range[['Value']] <- matrix(nrow = 3, c(1,2,3))
Но выдает ошибку:
Can't attach the RDCOMServer package needed to create a generic COM object
Я также попытался установить range[['Value']][[1]]
напрямую, но безуспешно.
values <- 1:3; rng <- sheet$Range("A3:A5"); for (i in 1:rng$Cells()$Count()) { cell <- rng$Cells(i); cell[["Value"]] <- values[i] }
. - person Jon Olav Vik   schedule 10.05.2020