我正在尝试使用RDCOMClient
库将值写入垂直Range
。由于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:7
放在单元格中B3
到B9
:
r= sheet$Range("B3:B9")
r[["Value"]] <- asCOMArray(matrix(1:7, 7, 1))