2015-06-03 21 views
14

Tôi có ứng dụng Sáng bóng sử dụng chức năng read.xlsx từ gói xlsx. Tất cả hoạt động tốt, nhưng tôi muốn thay đổi thành read_excel từ readxl, hy vọng nó sẽ nhanh hơn và có khả năng đối phó với các tệp lớn."read_excel" trong ứng dụng Sáng bóng

ui phần:

fileInput("inputFile","Upload file...") 

máy chủ phần:

data <- reactive({ 
    inFile <- input$inputFile 
    if (is.null(inFile)) { return(NULL) }  
    dataFile <- read_excel(inFile$datapath,sheet=1) 
    return(dataFile) 
    }) 

tôi nhận được lỗi "định dạng Unknown".

INFILE $ đường dữ liệu là "/tmp/.../60974676c7287e913d1c0dc5/0"
INFILE $ type là "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"

Câu hỏi 1: có cách nào để nói với read_excel rằng đó là tệp loại xlsx không?
Câu hỏi 2: có thể kiểm soát vị trí nơi tệp được tải lên sẽ được lưu trữ không?

+0

Bạn đã thử nó trong bàn điều khiển * R * với cùng một tệp đầu vào chưa? – r2evans

+0

Có, trong giao diện điều khiển R nó hoạt động. – polTo

Trả lời

15

Đây là một gói open issue với gói readxl. Cách giải quyết hiện tại được cung cấp ở đó là sao chép đường dẫn dữ liệu tệp và nối thêm .xlsx. Đây là một ví dụ làm việc trên máy của tôi giới hạn ở .xlsx tệp được chỉnh sửa để sử dụng file.rename thay vì 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) 
      }) 
     } 
     ) 
    ) 
+0

Bạn có thể đổi tên nó bằng 'file.rename' không? Bạn có thể cần phải dọn dẹp thủ công, nhưng điều đó là cần thiết. – r2evans

+0

@ r2evans, cảm ơn, 'file.rename' hoạt động, cập nhật. – cdeterman

+0

Tác phẩm này, cảm ơn bạn @cdeterman! – polTo

0

để đảm bảo người dùng tải lên tệp .xlsx hoặc bạn cần kiểm tra tiện ích bạn tự chuyển đổi giữa các chức năng đã đọc. Bạn có thể trích xuất tiện ích mở rộng như sau:

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) 
     }) 
     } 
    ) 
) 
Các vấn đề liên quan