ライブラリRange
を使用してバーティカルに値を書き込もうとしています。RDCOMClient
では VBA と非常によく似たコードを記述できるため、RDCOMClient
これを VBA で実行してから R に変換する方法を探していました。
Excel を作成するためのベース R コードは次のとおりです。
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]]
直接設定しようとしましたが、成功しませんでした。