我有一个Shiny应用程序,它使用程序包read.xlsx
中的xlsx
函数。一切正常,但我想从read_excel
更改为readxl
,希望它更快,能够处理大文件。
ui part:
fileInput("inputFile","Upload file...")
服务器部分:
data <- reactive({
inFile <- input$inputFile
if (is.null(inFile)) { return(NULL) }
dataFile <- read_excel(inFile$datapath,sheet=1)
return(dataFile)
})
我得到了#34;未知格式&#34;错误。
inFile $ datapath是&#34; / tmp /.../ 60974676c7287e913d1c0dc5 / 0&#34;
inFile $ type是&#34; application / vnd.openxmlformats-officedocument.spreadsheetml.sheet&#34;
问题1:有没有办法告诉read_excel
它是xlsx类型的文件?
问题2:是否可以控制上传文件的存储位置?
答案 0 :(得分:18)
这是一个带有readxl包的open issue。提供的当前解决方法是复制文件数据路径并附加.xlsx
。以下是我的计算机上的一个工作示例,仅限.xlsx
个已编辑过的文件,而不是file.rename
。
file.copy
修改强>
请注意,对于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)
})
}
)
)
版本的1.1.0
,不再需要重命名该文件。以下对我来说没有问题。
readxl
答案 1 :(得分:0)
确保用户确实上传.xlsx文件,或者您需要检查您自己的扩展名以在读取功能之间切换。您可以按如下方式提取扩展名:
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)
ext <- tools::file_ext(inFile$name)
file.rename(inFile$datapath,
paste(inFile$datapath, ext, sep="."))
read_excel(paste(inFile$datapath, ext, sep="."), 1)
})
}
)
)