无法在R shiny中读取Excel文件
无法在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`,任何解决方案都将非常有帮助。
在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) }) } )
以上是解决该问题的方法。