无法在R shiny中读取Excel文件

7 浏览
0 Comments

无法在R shiny中读取Excel文件

我有一个包含不同工作表的Excel文件,我想在服务器端读取它,而在用户界面端用户上传文件。\n由于我有很长的代码,无法在这里粘贴,所以我将使用一个简单的例子:\n

library(shiny)
library(readxl)
shinyApp(
  ui = fluidPage(
    fileInput("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
  }
)

\n但不幸的是,我遇到了一个错误,该函数无法在给定的datapath中找到文件。但有趣的是,当我使用`fread()`函数时,它可以识别`input$file$datapath`中的文件,但无法读取`.xlsx`文件。\n我已经尝试了这个问题中的解决方案,但没有成功,某种方式上`paste()`函数返回`0.xlsx`,而我的文件是`fileName.xlsx`,任何解决方案都将非常有帮助。

0
0 Comments

在R Shiny中无法读取Excel文件的原因是由于文件路径被错误地转换为Shiny。具体表现为“缺少文件扩展名”的错误。问题并不是关于反应性,而是read_excel()excel_sheets()函数无法像fread()那样读取datapath值。以下是解决方法:

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

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(lists):

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)
})
}
)

以上是解决该问题的方法。

0