Shiny中动态更新模态框报错:`path`必须为字符串
问题分析与解决
错误根源
- 缺少依赖包加载:
excel_sheets()函数属于readxl包,原代码未引入该包,会导致函数无法正常调用(这是必要前提)。 - 初始化时机错误:点击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
相关产品推荐
相关产品推荐

