是否可以通过 vba 按钮启动闪亮的应用程序?

Posted

技术标签:

【中文标题】是否可以通过 vba 按钮启动闪亮的应用程序?【英文标题】:Is it possible to start shiny apps via vba-button? 【发布时间】:2022-01-03 20:38:14 【问题描述】:

由于我的一个客户想要使用完全自动化的 excel/tm1 解决方案来处理集成的 R 预测程序,我正在寻找一种方法让用户分别检查原始时间序列、数据标准化后的时间序列和时间序列加上预测范围等等。

要运行其中一个应用程序解决方案,我想使用 vba 按钮来触发用于时间序列图形输出脚本的闪亮应用程序。如果我在 Rstudio 中打开该应用程序,则会打开一个带有给定地址的浏览器的 vba 按钮,并显示给定的应用程序输出。但是,如果不打开 Rstudio GUI,我不知道该怎么做。闪亮的应用程序应该能够以某种方式在后台运行。

是否有任何易于理解且实用的解决方案?

【问题讨论】:

您可以在某处运行 RStudio Server 的实例。这是浏览器中的 RStudio。还有一个 shinyserver 可以独立于 RStudio 托管闪亮的应用程序,这在生产设置中不是必需的。 我可能已经找到了解决方案:runApp(list(ui = ui, server = server),host="192.168.xx.xx",port=5013, launch.browser = TRUE)。如果我将此代码而不是 shinyapp(...) 粘贴到我的应用程序中,当我通过 vba-button 中的批处理文件触发脚本时,浏览器正在打开 是的,任何安装了闪亮包的 R 会话都可以在本地托管闪亮应用程序。请记住,这是本地部署。如果多个用户想要访问该应用程序,您可能需要添加负载均衡器等。 我会记住这一点。幸运的是,它仅适用于本地的单个用户 另见this相关帖子。 【参考方案1】:

由于您可以从 command line(在 RStudio 之外)运行 Shiny 应用程序,请考虑让 VBA 使用 WScript.Shell(流行的命令行调用程序)调用命令或使用 VBA 的 Shell。

CMD

使用cmd.exe,下面会启动一个辅助窗口,假设您在 Windows 环境中运行 Excel 并且在 PATH 环境变量中有Rscript 目录。此外,comamnd 在 R 代码之外运行 runApp,期望在代码中调用 shinyApp(...)

cmd.exe /k Rscript -e "library(shiny); runApp('/path/to/app/directory_or_script')"
对于 Mac:将 cmd.exe /k 替换为 open -a 对于 Linux:将 cmd.exe /k 替换为 gnome-terminal -x

VBA

Sub Run_R_Shiny()
On Error Goto ErrHandle
    Dim shell As Object
    Dim errorCode As Integer
    Dim rCommand As String

    rCommand = "cmd.exe /k Rscript -e ""library(shiny); runApp('/path/to/app/directory_or_script')"""
    Set shell = VBA.CreateObject("WScript.Shell")
    errorCode = shell.Run( _
        strCommand:=rCommand, _
        intWindowStyle:=1, _
        bWaitOnReturn:=False _
    )

ExitHandle:
    Set shell = Nothing                               ' RELEASE ALL set OBJECTS
    Exit Sub

ErrHandle:
    MsgBox Err.Number & " - " & Err.Description, vbCritical
    Resume ExitHandle
End Sub

顺便说一句,您可以使用这个same approach 来运行带有自动化Rscript 可执行文件的R 脚本。

【讨论】:

以上是关于是否可以通过 vba 按钮启动闪亮的应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

是否有一个带有“重置”按钮的闪亮 textInput 小部件?

停止功能以闪亮开始,直到按下按钮

闪亮的应用程序不会在 RStudio 中启动

应用启动时闪亮的 observeEvent 触发器

在指定的时间内运行闪亮的应用程序

R:快速启动的 GUI(闪亮的替代品?)