You need to enable JavaScript to run this app. 如何让R Shiny golem模块中的下载按钮正常导出.xlsx文件
优惠活动
大模型
产品
解决方案
定价
更多

如何让R Shiny golem模块中的下载按钮正常导出.xlsx文件

问题原因
  • 模块UI中的下载按钮ID未经过命名空间ns()包裹:Shiny模块要求所有UI元素的ID必须用当前模块的ns()函数处理,才能和服务器端的输出对应上。你当前的mod_download_ui中直接写了downloadButton("downloadData"),没有套ns(),导致服务器端的downloadHandler无法和UI按钮绑定,点击后会返回错误页(也就是你拿到的.html文件)。
  • 可选优化点:文件名中的Sys.time()默认输出包含冒号、空格等特殊字符,部分操作系统会不识别该文件名,建议格式化时间字符串。同时建议明确指定write_xlsx的所属包,避免依赖加载问题。
修改后的代码

mod_download.R(核心修改)

#' download UI Function
#'
#' @description A shiny Module.
#'
#' @param id,input,output,session Internal parameters for {shiny}.
#'
#' @noRd
#'
#' @importFrom shiny NS tagList
mod_download_ui <- function(id){
  ns <- NS(id)
  tagList(
 # 核心修改:给id套上ns()
 downloadButton(ns("downloadData"), "Download Metrics Reports")
  )
}

#' download Server Function
#'
#' @noRd
#' @importFrom writexl write_xlsx
mod_download_server <- function(input, output, session){
  ns <- session$ns
  data_xi <- data.frame(s = c(1:3),r = c(4:6), x =c(19:21))

  output$downloadData <- downloadHandler(
    # 优化文件名格式,避免特殊字符
    filename = function(){
      paste0(format(Sys.time(), "%Y%m%d_%H%M%S"), '_site_mtx.xlsx')
    },
    content = function(file){
      write_xlsx(data_xi, file)
    }
  )
}

app_server.R和app_ui.R无需修改,保持原有逻辑即可。

内容的提问来源于stack exchange,提问作者tycheo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 11:06:02