You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shiny中动态更新模态框报错:`path`必须为字符串

问题分析与解决

错误根源

  1. 缺少依赖包加载:excel_sheets()函数属于readxl包,原代码未引入该包,会导致函数无法正常调用(这是必要前提)。
  2. 初始化时机错误:点击Submit弹出模态框时,用户还未上传文件,input$file2$datapath为空值,此时直接调用excel_sheets()会因path参数不是有效字符串触发报错。

修正后的代码

library(shiny)
library(readxl) # 加载必要依赖包

ui <- fluidPage(
  actionButton("act", "Submit")
)

server <- function(input, output, session) {
  observeEvent(input$act, {
    showModal(modalDialog(
      fileInput("file2", label = "File 2", accept = c('.xlsx')),
      selectInput("sel", "sheets", choices = NULL) # 先初始化空下拉框
    ))
  })
  
  # 监听文件上传,动态更新工作表选项
  observeEvent(input$file2, {
    req(input$file2) # 确保文件已完成上传
    sheet_list <- excel_sheets(path = input$file2$datapath)
    updateSelectInput(session, "sel", choices = sheet_list, selected = "s")
  })
}

shinyApp(ui, server)

核心修正说明

  • 新增readxl包加载,保证excel_sheets()函数可用。
  • 模态框初始化时先设置空下拉框,避免提前调用需要有效文件路径的函数。
  • 通过observeEvent监听文件上传动作,用req()确保文件存在后,再读取工作表名称并更新下拉选项。
  • 修正accept参数写法为.xlsx,符合标准文件类型后缀规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 11:50:46