web-dev-qa-db-ja.com

光沢のあるアプリの「read_Excel」

パッケージxlsxread.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:アップロードされたファイルが保存される場所を制御することは可能ですか?

14
polTo

これは 未解決の問題 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)
      })
    }
  )
)
20
cdeterman

ユーザーが.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)
         })
        }
    )
)
0
tertra