2017-08-11 28 views
0

我正在研究一個閃亮的應用程序,該應用程序需要具有多個工作表的Excel作爲輸入。它與xlsx庫和read.xlsx函數一起工作良好。但是,它返回以下錯誤:使用.xlsx文件作爲Shiny App中的輸入

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. 
+0

你能發佈導致此錯誤的代碼部分嗎? – useR

+0

查看{readxl}包 –

+0

因此它*工作良好,然後突然它*完全停止工作*。所以有些改變。什麼?它只在一些XLS文件上?它在閃亮之外工作嗎?是否有一些軟件包或R已升級? – Spacedman

回答

0

(使用readxl)

input$uploadFile數據通路柱是不具有擴展名的臨時文件的路徑。所以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) 
      }) 
     } 
     ) 
    ) 

另外,看到這個。

​​