有谁知道如何通过托管的 Shiny 应用程序与位于 Dropbox 上的 .xlsx 文件进行交互?

Does anyone know how to interact with .xlsx files located on Dropbox via a hosted Shiny app?

我为我的工作制作了一个相对精致的 Shiny 应用程序,运行在本地非常好。但是,我正在尝试托管该应用程序,以便没有下载 R Studio 的用户可以访问它。我无法通过 shinyapps.io 将应用程序下载到 运行。这似乎主要与它无法找到位于 Dropbox 上的文件这一事实有关。该应用程序几乎完全基于在 Dropbox 上加载和写入文件。我尝试更改文件路径并使用 rdrop2 加载文件,但它会更改某些内容的格式,据我所知协调起来会非常复杂。我是一个非常新手的程序员,而且必须重组整个应用程序的想法让我有点焦虑,而且肯定需要相当多的努力。有谁知道通过 shinyapps.io 上托管的闪亮应用程序修改位于 Dropbox 上的文件的更“简单”方法,最好同时仍然能够使用“openxlsx”包?非常感谢您。

一个我认为可行但行不通的解决方法是使 Dropbox 文件的文件路径特定于用户,因为使用该应用程序的任何人都应该有权访问 Dropbox:

this.data <- as.data.frame(read.xlsx(粘贴("C:\Users\", Sys.info()[["user"]], " \Dropbox\rest 的文件路径", sep = "")))

免责声明:我不建议依靠 google-未提交的 URL 来保证隐私。

修改从 DropBox 复制的共享 link 将 dl=0 替换为 dl=1 以使下载开始而不是显示在 DropBox UI.

然后你可以download.file()变成tempfile()之前read.xlsx()它:

library(shiny)
library(openxlsx)
library(DT)

ui <- fluidPage(
  titlePanel("XL Read from dropbox"),
  mainPanel( DTOutput("dt"))
)

server <- function(input, output) {
  tmpfile <- tempfile(fileext='.xlsx')
  download.file(url = "https://www.dropbox.com/s/1v0l...5u803a9hg/my_file.xlsx?dl=1", destfile = tmpfile , mode="wb")
  output$dt <- renderDT(read.xlsx(outfile))
}

shinyApp(ui = ui, server = server)