闪亮的下载 csv 或 excel 取决于 radioButton
shiny download csv or excel depending on radioButton
根据用户输入下载为 excel 或 csv。该代码仅适用于 radioButtons 中预先 selected 的值。如下所示,它适用于 csv,因为 selected = "csv"
。如果将其更改为 xlsx,则它仅适用于 xlsx。用户应该能够 select 并且两个选项都应该是可能的。
也许该值已缓存,我需要以某种方式强制更新。
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打开。
您在 filename
参数中使用了反应值。在这种情况下,您必须将 filename
设置为函数:
filename = function(){
stringr::str_c(Sys.Date(), " Palim.", input$dl_data_file_type)
}
根据用户输入下载为 excel 或 csv。该代码仅适用于 radioButtons 中预先 selected 的值。如下所示,它适用于 csv,因为 selected = "csv"
。如果将其更改为 xlsx,则它仅适用于 xlsx。用户应该能够 select 并且两个选项都应该是可能的。
也许该值已缓存,我需要以某种方式强制更新。
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打开。
您在 filename
参数中使用了反应值。在这种情况下,您必须将 filename
设置为函数:
filename = function(){
stringr::str_c(Sys.Date(), " Palim.", input$dl_data_file_type)
}