BERT R 脚本,环境和范围如何工作?

BERT R script, How does environment and scope work?

我在理解 BERT 如何处理 R 环境时遇到了一些问题。理想情况下,我希望能够通过 VBA 运行 R 脚本,类似于 VBA Sub。我认为 BERT 不会促进这一点。

当我在 BERT 控制台中 运行 下面的 R 脚本时:

controls_sheet <- EXCEL$Application$get_Sheets()$get_Item('Sheet1')
some_vec <- 1:5
controls_sheet$get_Range('A1:A5')$put_Value(some_vec); # print results to sheet

行为符合我的预期,我在 Sheet1 上打印了 A1:A5 范围内从 1 到 5 的序列。

当我设置一个函数来执行相同的任务时,结果没有打印到 sheet。例如使用以下:

test_fun <- function(sheet = 'Sheet1'){
    controls_sheet <- EXCEL$Application$get_Sheets()$get_Item(sheet)
    some_vec2 <- 1:5
    controls_sheet$get_Range('A1:A5')$put_Value(some_vec2); # print results to sheet
} 

我的期望是,在我提供给函数的作品sheet 中,1 到 5 的序列形式将放在 A1:A5 范围内。在 worksheet Sheet1 中的任何位置调用 =R.test_fun("Sheet1") 不会在 A1:A5 范围内产生任何输出。

谁能告诉我如何 运行 类似于 VBA sub 的 R 脚本或创建一个不接受输入的函数,运行s 脚本并将输出打印到一部作品sheet.

这实际上是上下文问题。您不能设置来自另一个单元格的单元格值,无论您使用的是 COM 还是 Excel API。

不确定为什么您在 shell 中没有收到关于此的错误。

您需要从不同的上下文执行此操作,例如从 BERT 控制台或可能从 VBA 函数:

Sub x()
    Application.Run "BERT.Call.R", "test_fun", "Sheet1"
End Sub