首页 文章

使用.xlsx文件作为Shiny App中的输入

提问于
浏览
1

我正在开发一个闪亮的应用程序,它需要一个带有多个工作表的Excel作为输入 . 它与xlsx库和read.xlsx函数配合得很好 . 但是,它返回以下错误:

java.lang.IllegalArgumentException: Cell index must be >= 0

我现在切换到gdata和read.xls,但每次运行模型时都会出现文件路径错误 .

我想知道是否有人之前处理过这个问题,是否有任何简单的解决方案来解决这个问题 .

编辑:

以下代码

library(shiny)
library(xlsx)

ui <- fluidPage(
  fileInput("uploadFile", "XLSX file"),
  verbatimTextOutput("summary")
)

server <- function(input, output) ({

  dataset<-reactive({ 
    inFile <- input$uploadFile 
    dat<-read.xlsx(inFile$datapath, 1)
    return(dat)
  })

  output$summary <- renderText({summary(dataset())})

})

shinyApp(ui, server)

返回:

Error : package ‘rJava’ could not be loaded

如果,而是我使用

library(shiny)
library(readxl)

ui <- fluidPage(
  fileInput("uploadFile", "XLSX file"),
  verbatimTextOutput("summary")
)

server <- function(input, output) ({

  dataset<-reactive({ 
    inFile <- input$uploadFile 
    dat<-read_excel(inFile$datapath, sheet =  1)
    return(dat)
  })

  output$summary <- renderText({summary(dataset())})

})

shinyApp(ui, server)

我明白了:

Error: Missing file extension.

2 回答

  • 1

    (使用readxl)

    input$uploadFile 中的datapath列是临时文件的路径,该文件没有扩展名 . 所以 read_excel() 不知道它是什么格式 .

    请改用 read_xlsx()

    dat <- read_xlsx(inFile$datapath, sheet = 1)

  • 0

    我刚尝试了这个,它对我来说很好 .

    library(shiny)
    library(readxl)
    
    runApp(
        list(
            ui = fluidPage(
                titlePanel("Use readxl"),
                sidebarLayout(
                    sidebarPanel(
                        fileInput('file1', 'Choose xlsx file',
                                  accept = c(".xlsx")
                                  )
                        ),
                    mainPanel(
                        tableOutput('contents'))
                    )
                ),
            server = function(input, output){
                output$contents <- renderTable({
                    inFile <- input$file1
    
                    if(is.null(inFile))
                        return(NULL)
                    file.rename(inFile$datapath,
                              paste(inFile$datapath, ".xlsx", sep=""))
                    read_excel(paste(inFile$datapath, ".xlsx", sep=""), 1)
                })
            }
            )
        )
    

    另外,看到这个 .

    https://shiny.rstudio.com/gallery/file-upload.html

相关问题