Как скачать книгу через downloadHandler на Shiny?

Как мы можем сохранить книгу в определенной папке и сделать ее доступной для загрузки пользователем?

ссылка: Shiny + downloadHandler + Openxlsx не создает файл xlsx < /а>

Процедура:

  • Создать данные
  • Сохранить как книгу
  • Сделайте его доступным для загрузки, прочитав его как файл xlsx.

Несмотря на то, что книга записана в папку, при загрузке этой книги возникает ошибка.

library(shiny)
library(openxlsx)
library(writexl)
library(tidyverse)
ui <- fluidPage(
  downloadButton("dl", "Download")
)

server <- function(input, output) {
  data1 = mtcars[,c(1,2)] %>% head() # data for Col 1 ,until Row 6
  data2 = gapminder::gapminder[,c(1,4)] %>% head() # data for Col 1 , Row from 8 until Row 13
  data3 = mtcars[,c(1,2)] %>% tail() # data for Col 1 , Row from 15 until Row 20

  # Creating a workbook for user to download
  wb <- createWorkbook()
  addWorksheet(wb, sheetName = "sheet1")
  writeData(wb, sheet = 1, x = data1, startCol = 1, startRow = 1)
  writeData(wb, sheet = 1, x = data2, startCol = 1, startRow = 8)
  writeData(wb, sheet = 1, x = data3, startCol = 1, startRow = 15)
  ex_wb <- paste0("example", ".xlsx")
  saveWorkbook(wb, file = ex_wb, overwrite = TRUE)

  output$dl <- downloadHandler(
    filename = function(){ex_wb # filename
      },
    content = function(file) {
      # Content to be available for user to download 
      read.xlsx(ex_wb) # Making dataframe available for user to download
    })
}
shinyApp(ui, server)

person Abhishek    schedule 13.01.2020    source источник
comment
Я думаю, что использование downloadHandler в Rstudio вызывает проблемы. Вы пытались запустить свое приложение в Chrome или другом браузере, чтобы проверить, работает ли оно там?   -  person cory    schedule 13.01.2020
comment
Спасибо за ваше предложение. На самом деле, когда мы запускаем приложение, оно появляется в самом Chrome. Однако возникает ошибка при нажатии кнопки загрузки   -  person Abhishek    schedule 13.01.2020


Ответы (1)


Попробуй это :

library(shiny)
library(openxlsx)
library(writexl)
library(tidyverse)
ui <- fluidPage(
  downloadButton("dl", "Download")
)

server <- function(input, output) {
  data1 <- mtcars[, c(1, 2)] %>% head() # data for Col 1 ,until Row 6
  data2 <- gapminder::gapminder[, c(1, 4)] %>% head() # data for Col 1 , Row from 8 until Row 13
  data3 <- mtcars[, c(1, 2)] %>% tail() # data for Col 1 , Row from 15 until Row 20

  # Creating a workbook for user to download
  wb <- createWorkbook()
  addWorksheet(wb, sheetName = "sheet1")
  writeData(wb, sheet = 1, x = data1, startCol = 1, startRow = 1)
  writeData(wb, sheet = 1, x = data2, startCol = 1, startRow = 8)
  writeData(wb, sheet = 1, x = data3, startCol = 1, startRow = 15)


  output$dl <- downloadHandler(
    filename = function() {
      paste0("example", ".xlsx")
    },
    content = function(file) {
      saveWorkbook(wb, file = file, overwrite = TRUE)
    }
  )
}
shinyApp(ui, server)
person jyjek    schedule 13.01.2020