浏览数据后,它不会显示在闪亮的仪表板中仪表板、数据

2023-09-03 14:10:42 作者:姐、狠低调

我想用"Browse Option"上传一个文件,然后我想用"Worklist No"自动填充表(意思是:选择一个输入应该自动填充REST字段)值和REST列应该是自动填充的。但我收到了一些错误。 基于工作列表否我的其他数据应该填充在闪亮仪表板的不同输入框中。

[![enter image description here][1]][1]library(shiny)
library(shinydashboard)

ui <- dashboardPage(
  dashboardHeader(title = "Basic dashboard"),
  dashboardSidebar(),
  dashboardBody(
    fluidRow(
      fileInput("file_upload","Uplaod Data",buttonLabel = "Browse..",placeholder = "No file Selected")
    ),
    fluidRow(
      column(3,
             uiOutput("p1_ui")
      ),
      column(3,
             uiOutput("p2_ui")
      ),
      column(3,
             uiOutput("p3_ui")
      )
    ),
    fluidRow(
      column(6,
             h3("Uploaded DATA"),
             DTOutput("uploaded_data_table")
      ),
      column(6,
             h3("Selected DATA"),
             DTOutput("selected_data_table")
      )
    )
  )
)

server <- function(input, output,session) {
  values <- reactiveValues(
    upload_state = NULL
  )
  data_upload_fun<-eventReactive(input$file_upload,{
    req(input$file_upload)
    if(values$upload_state=='reset'||is.null(values$upload_state))
    {
      data_in<-read_xlsx(input$file_upload$datapath
                    )
      values$upload_state <- 'uploaded'
      data_in
    }  
  })
  output$uploaded_data_table <- renderDT({
    DT::datatable(data_upload_fun())
  })
  output$p1_ui<-renderUI({
    if(is.null(values$upload_state)|| values$upload_state=='reset')
    {
      selectInput("p1", choices = NULL, label = 'WorklistNo')
   } 
    else
    {
      data_upload_fun()
      selectInput("p1", choices = uploade_data$WorklistNo, label = 'WorklistNo')
    }
  })

  output$p2_ui<-renderUI({
    if(is.null(values$upload_state)|| values$upload_state=='reset')
    {
      selectInput("p2", choices = NULL, label = 'Status')
    }
    else
    {
      data_upload_fun()
      status<-data_in[data_in$WorklistNo==input$p1,2]
      selectInput("p2", choices = as.list(status), label = 'Status')
    }
  })
  output$p3_ui<-renderUI({
    if(is.null(values$upload_state)|| values$upload_state=='reset')
    {
      selectInput("p3", choices = NULL, label = 'Plant')
    }
    else
    {
      data_upload_fun()
      plant<-data_in[data_in$WorklistNo==input$p1 & data_in$Status==input$p2,3]
      selectInput("p3", choices = as.list(plant), label = 'Plant')
    }
  })

  output$selected_data_table<-renderDT({
    if(is.null(values$upload_state)|| values$upload_state=='reset')
    {
      returnValue()
    }
    else
    {
      data_upload_fun()
      data_to_show<-data_in[data_in$WorklistNo==input$p1 & data_in$Status==input$p2 & data_in$Plant== input$p3, ]
      DT::datatable(data_to_show)
    }
  })

}

shinyApp(ui, server) 

推荐答案

修改行数据后不显示 打开Excel表格文件后空白不显示内容的解决方法

从previous question看起来您想要被动地执行此操作。您需要了解闪亮的反应性组件行为的概念。

但是,有几点需要突出显示。

将‘data_in<;-Read_xlsx()’设置为‘data_in<;<;-Read_xlsx()’,使其成为全局赋值。 在输出$pi_ui中,您使用了‘UPLOADE_DATA$WorklistNo’,它将是‘data_in$WorklistNo’

我认为您正在上载静态的Excel文件。因此,您需要根据您的EXCEL修改代码。我的代码是基于我的Excel运行的。因此,要使其正常工作,您需要进行相应的更改。

但是,即使您想要处理数据,也需要提供最小的可重现代码,然后请提供最小的数据集。

使用相同数据集(.xlsx文件)的修订代码

library(shinydashboard)
library(DT)
library(xlsx)

ui <- dashboardPage(
  dashboardHeader(title = "Basic dashboard"),
  dashboardSidebar(),
  dashboardBody(
    fluidRow(
      fileInput("file_upload","Uplaod Data",buttonLabel = "Browse..",placeholder = "No file Selected")
    ),
    fluidRow(
      column(3,
             uiOutput("p1_ui")
      ),
      column(3,
             uiOutput("p2_ui")
      ),
      column(3,
             uiOutput("p3_ui")
      )
    ),
    fluidRow(
      column(6,
             h3("Uploaded DATA"),
             DTOutput("uploaded_data_table")
      ),
      column(6,
             h3("Selected DATA"),
             DTOutput("selected_data_table")
      )
    )
  )
)

server <- function(input, output,session) {
  values <- reactiveValues(
    upload_state = NULL
  )
  data_upload_fun<-eventReactive(input$file_upload,{
    req(input$file_upload)
    if(values$upload_state=='reset'||is.null(values$upload_state))
    {
      data_in<<-read.xlsx(input$file_upload$datapath,1)
      values$upload_state <- 'uploaded'
      data_in
    }  
  })


  output$uploaded_data_table <- renderDT({
    DT::datatable(data_upload_fun())
  })
  output$p1_ui<-renderUI({
    if(is.null(values$upload_state)|| values$upload_state=='reset')
    {
      selectInput("p1", choices = NULL, label = 'WorklistNo')
    } 
    else
    {
      data_upload_fun()
      selectInput("p1", choices = data_in$WLID, label = 'WorklistNo')
    }
  })

  output$p2_ui<-renderUI({
    if(is.null(values$upload_state)|| values$upload_state=='reset')
    {
      selectInput("p2", choices = NULL, label = 'Status')
    }
    else
    {
      data_upload_fun()
      status<-data_in[data_in$WLID==input$p1,3]
      selectInput("p2", choices = as.list(status), label = 'Status')
    }
  })
  output$p3_ui<-renderUI({
    if(is.null(values$upload_state)|| values$upload_state=='reset')
    {
      selectInput("p3", choices = NULL, label = 'Plant')
    }
    else
    {
      data_upload_fun()
      plant<-data_in[data_in$WLID==input$p1 & data_in$STATUS==input$p2,2]
      selectInput("p3", choices = as.list(plant), label = 'Plant')
    }
  })

  output$selected_data_table<-renderDT({
    if(is.null(values$upload_state)|| values$upload_state=='reset')
    {
      returnValue()
    }
    else
    {
      data_upload_fun()
      data_to_show<-data_in[data_in$WLID==input$p1 & data_in$STATUS==input$p2 & data_in$PLANT== input$p3, ]
      DT::datatable(data_to_show)
    }
  })

}

shinyApp(ui, server) 

希望这能有所帮助...