Как заставить пользователей загружать предварительно загруженный отформатированный документ Excel в R Shiny?

Я создаю приложение Shiny, в котором пользователи проходят опрос и на основе их ответов предлагают им различные шаблоны для использования. Все шаблоны представляют собой файлы Excel, сильно отформатированные (например, содержащие изображения, смещенные заголовки и т. д.), как на снимке экрана, который я загрузил здесь. К сожалению, stackoverflow не позволяет мне загрузить файл Excel, чтобы сделать его полностью воспроизводимым, но если вы можете запустить его с любым нетабличным файлом Excel, он будет работать. [![введите описание изображения здесь][1]][ 1]

Все эти шаблоны загружаются на сервер, и ввод пользователя не влияет на них. Я пробовал следовать примеру других, например [one][2], но постоянно получаю ошибки.

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

library(readxl)
library(shiny)
library(writexl)


ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
  ),
    
    mainPanel(
      downloadButton("downloadData", "Download Fancy Excel File")
        )))


server <- function(input, output) {

  
  output$downloadData <- downloadHandler(
    filename = function() {
      paste("file", "xlsx", sep='')
    },
    content = function(file) {
      myfile <- srcpath <- 'Home/Other Layer/Fancy Template.xlsx'
      file.copy(myfile, file)
    }
  )
  }

# Run the application 
shinyApp(ui = ui, server = server)
~~~~


  [1]: https://i.stack.imgur.com/FK034.png
  [2]: https://stackoverflow.com/questions/39449544/shiny-download-an-excel-file

person J.Sabree    schedule 22.07.2021    source источник


Ответы (1)


Вам не хватает . в имени файла. Кроме того, вы можете хранить все файлы, которые вы хотите, чтобы пользователи загружали в папку www. Следующее работает для меня.

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
    ),
    
    mainPanel(
      downloadButton("downloadData", "Download Fancy Excel File") 
    )))


server <- function(input, output) {
  
  output$downloadData <- downloadHandler(
    filename = function() {
      paste("testfile", ".xlsx", sep='')
    },
    content = function(file) {
      # myfile <- srcpath <- 'Home/Other Layer/Fancy Template.xlsx'
      myfile <- srcpath <-  "./www/test141.xlsx"
      file.copy(myfile, file)
    }
  )
}

# Run the application 
shinyApp(ui = ui, server = server)
person YBS    schedule 22.07.2021
comment
извините, я новичок в Shiny. Что вы имеете в виду под папкой www? У меня нет папки с именем www. - person J.Sabree; 22.07.2021
comment
Затем вы должны создать папку с именем www в том же месте, где вы храните свою программу app.R. Вы храните изображения, файл custom.CSS, script.js и т. д. в этой папке, чтобы ваше приложение могло получить доступ к этим файлам. - person YBS; 22.07.2021