2

ライブラリ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]]直接設定しようとしましたが、成功しませんでした。

4

1 に答える 1