是否可以通过 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 按钮启动闪亮的应用程序?的主要内容,如果未能解决你的问题,请参考以下文章