RDCOMClient - 设置垂直范围值

时间:2018-05-04 15:49:57

标签: r rdcomclient

我正在尝试使用Range库将值写入垂直RDCOMClient。由于RDCOMClient允许您编写与VBA非常相似的代码,因此我一直在寻找在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]]但没有成功。

1 个答案:

答案 0 :(得分:1)

在单元格 1:7B3 中放置垂直 B9

r= sheet$Range("B3:B9")
r[["Value"]] <- asCOMArray(matrix(1:7, 7, 1))