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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:18:03