Распределение данных в Excel с Shiny - PullRequest
0 голосов
/ 05 февраля 2020

Я не очень хорош в Engli sh, поэтому предложения могут быть неправильными.

Я хочу распространять заранее подготовленные файлы Excel среди пользователей. Можно ли реализовать такую ​​систему с блеском? Нет проблем с .zip.
Спасибо

ui.R

shinyUI(
  fluidPage(
    downloadButton('downloadData', 'Excel Download')
  )
)

server.R

shinyServer(function(input, output) {
  output$downloadData <- downloadHandler(
    filename = "distribution.xlsx",
    content = "distribution_excel"
  )
})

file organization

1 Ответ

1 голос
/ 05 февраля 2020

Да, это возможно, и вы были почти там. Ниже приведен минимальный рабочий пример. Я предполагаю, что ваш .xlsx файл находится в той же папке, что и ваш app.R. Обратите внимание, что я создал приложение в одном файле R, а не в двух отдельных файлах.

Хитрость в получении файла для загрузки заключается в использовании функции для содержимого внутри downloadHandler(). В частности, мы используем базовую функцию file.copy(). Нажатие на кнопку теперь должно загрузить файл: distribution.xlsx. Этот файл, очевидно, можно обменять с файлом zip.

Если вы хотите, чтобы разные пользователи имели доступ к разным файлам Excel, вы можете написать дополнительную функцию внутри своей серверной функции, которая передает аргумент файла в downloadHandler().

# Load packages ----
pkgs <- c("shiny")
invisible(lapply(pkgs, require, character.only = TRUE))

# Set up the UI ----
ui <- fluidPage(
  # Define your download button
  downloadButton(
    outputId = "downloadData",
    label = "Excel Download"
  )
)

# Set up the server side ----
server <- function(input, output, session) {

  # Define the download handler with function() for content. 
  output$downloadData <- downloadHandler(
    filename = "distribution.xlsx",
    content = function(file) {
      file.copy("distribution.xlsx", file)
    }
  )
}

# Combine into an app ----
shinyApp(ui = ui, server = server)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...