блестящий скачать CSV или Excel в зависимости от RadioButton - PullRequest
0 голосов
/ 14 июня 2019

Скачать в формате Excel или CSV на основе пользовательского ввода.Код работает только для предварительно выбранного значения в radioButtons.Как показано ниже, он работает для CSV, потому что selected = "csv".Если он изменен на xlsx, он работает только для xlsx.Пользователь должен иметь возможность выбирать, и обе опции должны быть возможны.

Возможно, значение кэшировано, и мне нужно как-то принудительно обновить.

library(shiny)

ui <- fluidPage(
    h4("Download data"),
    wellPanel(
        fluidRow(
            column(4, radioButtons("dl_data_file_type", "Format",
                                   choices = c(excel = "xlsx",
                                               csv = "csv"),
                                   selected = "csv")),
            column(5),
            column(3, downloadButton("dl_data_dwnld_bttn"))
        )))


server <- function(input, output) {
    output$dl_data_dwnld_bttn <- {
        downloadHandler(
            filename = stringr::str_c(Sys.Date(), " Palim.", input$dl_data_file_type),
            content = function(file){
                x <- iris

                if ( input$dl_data_file_type == "xlsx")  {
                    writexl::write_xlsx(x, file)}
                else if ( input$dl_data_file_type == "csv") {
                    readr::write_csv(x, file)}

            })}}


shinyApp(ui = ui, server = server)

Ошибка в том, что файл Excelвсе еще заканчивается на .csv и не может быть открыт Excel.

enter image description here

1 Ответ

1 голос
/ 14 июня 2019

Вы используете реактивное значение в аргументе filename. В этом случае вы должны установить filename как функцию:

filename = function(){
  stringr::str_c(Sys.Date(), " Palim.", input$dl_data_file_type)
}
...