Shiny中使用fileInput上传Excel文件后表格无法显示问题求助
Shiny Excel上传数据显示问题修复
问题原因
- 重复定义
data响应式变量,保留的无用函数function.test内部调用了未定义的Test变量,运行直接报错 read_excel默认读取的日期列不是Date类型,和原逻辑的日期格式不匹配,导致后续筛选失效- 生成日期选择器、执行数据筛选前未判断数据是否加载完成,空数据状态下会触发报错阻塞流程
- 冗余的硬编码逻辑未清理,造成逻辑冲突
修正后代码
library(shiny) library(shinythemes) library(dplyr) library(tidyverse) library(lubridate) library(readxl) library(DT) ui <- fluidPage( shiny::navbarPage(theme = shinytheme("flatly"), collapsible = TRUE, br(), tabPanel("", sidebarLayout( sidebarPanel( uiOutput('fileInput'), uiOutput('daterange') ), mainPanel( dataTableOutput('table') ) )) )) server <- function(input, output,session) { # 仅保留文件读取的响应式逻辑 data <- eventReactive(input$file, { req(input$file) df <- read_excel(input$file$datapath) # 转换日期列为Date类型,匹配原逻辑格式 df$date2 <- as.Date(df$date2) return(df) }) output$fileInput <- renderUI({ fileInput("file",h4("Import file"), multiple = FALSE,accept = ".xlsx", placeholder = "No file selected") }) output$daterange <- renderUI({ # 先判断数据是否加载完成再渲染日期选择器 req(data()) dateRangeInput("daterange1", "Period you want to see:", min = min(data()$date2), max = max(data()$date2)) }) data_subset <- reactive({ # 增加数据加载完成的判断 req(data(), input$daterange1) req(input$daterange1[1] <= input$daterange1[2]) days <- seq(input$daterange1[1], input$daterange1[2], by = 'day') showModal(modalDialog("Wait", footer=NULL)) on.exit(removeModal()) All<- subset(data(), date2 %in% days) All<-All%>% mutate(TOTAL = rowSums(across(3:last_col()), na.rm = TRUE)) return(All) }) output$table <- renderDataTable({ req(data_subset()) datatable(data_subset(),options = list( columnDefs = list( list(className = 'dt-center', targets = "_all")), paging = TRUE, searching = FALSE,pageLength = 10,dom = 'tip', scrollx=TRUE), rownames = FALSE) %>% formatRound(c(3:4), digits=0) }) } shinyApp(ui = ui, server = server)
内容的提问来源于stack exchange,提问作者Antonio
相关产品推荐
相关产品推荐

