【问题标题】:Using an .xlsx file as an input in a Shiny App在 Shiny App 中使用 .xlsx 文件作为输入
【发布时间】:2018-01-20 06:58:03
【问题描述】:

我正在开发一个闪亮的应用程序,该应用程序需要带有多张工作表的 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.

【问题讨论】:

  • 您能否发布导致此错误的部分代码?
  • 看看 {readxl} 包
  • 所以它一直运行良好,然后突然完全停止运行。所以有些事情发生了变化。什么?它仅在某些 XLS 文件上吗?它在闪亮之外有效吗?是否升级了某些软件包或 R?
  • 是的,我已经升级了我的 RStudio,根据这个答案 [链接] (stackoverflow.com/questions/32314787/…) 似乎它可能是问题的根源。但这不应该解释为什么问题发生在 Shiny 服务器的应用程序版本中,或者是这样吗?

标签: r excel shiny


【解决方案1】:

(使用 readxl)

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

使用 read_xlsx() 代替:

dat &lt;- read_xlsx(inFile$datapath, sheet = 1)

【讨论】:

    【解决方案2】:

    我刚试过这个,对我来说效果很好。

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-08
      • 1970-01-01
      • 2018-02-14
      • 2014-10-07
      • 2016-01-09
      • 2021-09-25
      • 1970-01-01
      相关资源
      最近更新 更多