无法读取R闪亮

时间:2017-08-01 10:20:17

标签: r shiny

我有一个包含不同表格的Excel文件,我想在服务器一侧阅读,而在 ui 一侧,用户上传文件。

由于我有一个很大的代码,我无法将其粘贴到这里,这就是为什么我会使用一个小例子:

library(shiny)
library(readxl)

shinyApp(
  ui = fluidPage(
    fileInput("file","Upload the file")
  ),
  server = function(input, output) {

    sheets <- readxl::excel_sheets(input$file$datapath)
    x <- lapply(sheets, function(X) readxl::read_excel(input$file$datapath, sheet = X))
    names(x) <- sheets

  }
)

但遗憾的是我收到错误,该函数无法找到给定数据路径的文件。但有趣的是,当我使用fread()函数时,它识别input$file$datapath中的文件,但它无法读取.xlsx文件。

我已经尝试了这个question中的解决方案,但它没有用,不知怎样,粘贴paste()函数返回 0.xlsx 而我的文件就像 fileName.xlsx ,任何解决方案都会非常有用。

1 个答案:

答案 0 :(得分:4)

在服务器端,您需要一个反应式环境定义:

server = function(input, output) {
    data <- reactive({
    sheets <- excel_sheets(input$file$datapath)
    x <- lapply(sheets, function(X) readxl::read_excel(input$file$datapath, sheet = X))
    names(x) <- sheets
    return(x)
})
}

编辑: 使用你的来源  引用"read_excel" in a Shiny app以及用于读取数据框Read all worksheets in an Excel workbook into an R list with data.frames列表中的多个工作表的函数,您可以执行以下操作,它读入列表并呈现str(列表)

library(shiny)
library(readxl)

shinyApp(
 ui = fluidPage(
  fileInput("file","Upload the file"),
  verbatimTextOutput("list_sheets")
),
 server = function(input, output) { 
 read_excel_allsheets <- function(filename) {
  sheets <- readxl::excel_sheets(filename)
  x <-    lapply(sheets, function(X) readxl::read_excel(filename, sheet = X))
  names(x) <- sheets
  x
}
 output$list_sheets <- renderPrint({      
  inFile <- input$file
  if(is.null(inFile)){
    return(NULL)
  }
  file.rename(inFile$datapath,paste(inFile$datapath, ".xlsx", sep=""))
  list_dfs <- read_excel_allsheets(paste(inFile$datapath, ".xlsx", sep=""))
  str(list_dfs)
})
}
)

您遇到的问题(&#34;缺少文件扩展名&#34;)是由于错误地将文件路径转换为闪亮。