パッケージxlsx
のread.xlsx
関数を使用するShinyアプリがあります。すべて正常に動作しますが、より高速で大きなファイルに対応できることを期待して、readxl
からread_Excel
に変更したいと思います。
uiパート:
fileInput("inputFile","Upload file...")
サーバー部分:
data <- reactive({
inFile <- input$inputFile
if (is.null(inFile)) { return(NULL) }
dataFile <- read_Excel(inFile$datapath,sheet=1)
return(dataFile)
})
「不明な形式」エラーが発生します。
inFile $ datapathは "/tmp/.../60974676c7287e913d1c0dc5/0"です
inFile $ typeは "application /vnd.openxmlformats-officedocument.spreadsheetml.sheet"です
質問1:それがxlsxタイプのファイルであることをread_Excel
に伝える方法はありますか?
質問2:アップロードされたファイルが保存される場所を制御することは可能ですか?
これは 未解決の問題 readxlパッケージでした。現在提供されている回避策は、ファイルのデータパスをコピーし、.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)
})
}
)
)
[〜#〜] edit [〜#〜]1.1.0
バージョンのreadxl
では不要になったことに注意してくださいファイルの名前を変更します。以下は今のところ問題なく動作します。
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({
req(input$file1)
inFile <- input$file1
read_Excel(inFile$datapath, 1)
})
}
)
)
ユーザーが.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)
})
}
)
)