【问题标题】:How to do autofill of data in shiny app using excel file如何使用excel文件在闪亮的应用程序中自动填充数据
【发布时间】:2019-11-13 18:09:54
【问题描述】:

我正在尝试使用浏览选项从电脑上传数据来读取数据集。之后,我想使用第一列条目显示要自动填充的文件内容。

library(shiny)
library(shinydashboard)




ui<-(fluidPage(
  titlePanel("Auto Fill"),
  sidebarPanel(
autoFillDF<-  fileInput('file1', 'Choose xlsx file',
          accept = c(".xlsx")),
  # actionButton("go", "update"),
 selectizeInput("p1", choices = autoFillDF$WorklistNo, selected = NULL, label = 'WorklistNo'),
 selectizeInput("p2", choices = NULL, label = 'Status'),
 selectizeInput("p3", choices = NULL, label = 'Plant'),

 ),
  mainPanel(
    DT::dataTableOutput('table')
  )
)
)

server<-(function(input, output, session) {

  updateApp <- reactive({
    data <- autoFillDF
    data <- data[data$WorklistNo %in% input$p1,]
    updateSelectizeInput(session, 'p2', choices = data$Status, selected = data$Status, server = TRUE)
    updateSelectizeInput(session, 'p3', choices = data$Plant, selected = data$Plant, server = TRUE)

    data
  })

  shinyApp(ui = ui, server = server)

  output$table <- DT::renderDataTable(
    DT::datatable(updateApp()) 
  )

})
shinyApp(ui = ui, server = server)

这是我的数据集的样子。我必须阅读所有列数据。我想把 WorklistNo 和 rest 应该是自动填充。

提前致谢。

【问题讨论】:

  • @ElvinMitchellToro
  • @Damian 你能帮忙吗
  • 我无法运行您现有的代码,它显示了一堆错误。你能重新检查一下吗?
  • @amrrs 我已经编辑了代码.. 请检查

标签: r shiny shinydashboard shinyapps


【解决方案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))
    {
      df<<-read.csv(input$file_upload$datapath,
                   header = TRUE)
      values$upload_state <- 'uploaded'
      df
    }  
  })
    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 = 'WLID')
    }
    else
    {
      data_upload_fun()
      selectInput("p1", choices = df$WLID, label = 'WLID')
    }
  })

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

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

}

shinyApp(ui, server)

用户界面看起来像:

DATA 看起来像

请让我知道这是否有效以及有什么需要改变的......

【讨论】:

  • 感谢您的回答,我尝试将您的代码与我的代码集成,但自动填充值仍然存在错误。在数据集中,我想输入一个 WorklistNo 的值,然后自动填充其余字段,这样我们就可以忽略 WLID。所以我们必须从第二列读取我们的文件。而且我的文件要求仅在 excel 中,客户没有 csv :) 所以我们必须从第二列读取我们的文件
  • @NIrbhayMathur 您可以修改代码。也可以使用 xlsx 包进行 read.xlsx 功能
  • 仍然,代码中存在一些问题。请看看我提出的:stackoverflow.com/questions/56927812/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-09
  • 2015-05-08
  • 2017-09-13
  • 1970-01-01
  • 1970-01-01
  • 2021-09-04
  • 2018-12-18
相关资源
最近更新 更多