上传,转换xlsx文件&下载结果闪亮

时间:2018-03-19 09:02:41

标签: r if-statement error-handling upload shiny

我已经完成了一个程序来转换一个excel文件,这个文件完全独立地工作。我遇到的问题是我试图将它包含在一个闪亮的应用程序中,以便与其他人分享。目标是上传一个与特定模板相对应的excel文件并下载转换结果。

我收到错误,我不明白。

这是我的代码:

library(shiny)
library(readxl)
library(stringr)

transformFile <- function(df1, df2){
  for(i in seq(1, nrow(df1))){
    element1 <- as.character(df1$Operations[i]);

    for(j in seq(1, nrow(df2))){
      element2 <- as.character(df2$MotsARechercher[j]);

      if(str_detect(element1, ignore.case(element2))){

        df1$TypeOperations[i] <- as.character(df2$TypeOperations[j]);
      }
    }
  }
  return(df1)
}

ui <- fluidPage(
  titlePanel("Use readxl"),
  sidebarLayout(
    sidebarPanel(
      fileInput('file1', 'Choose xlsx file',
        accept = c(".xlsx"),
        downloadButton('file2', "Download modified file")
      )
    ),
    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)
})

  output$downloadData <- downloadHandler(
    filename = function() {
      paste("comptesAvecLibellesOpe.xlsx")
    },
    content = function(file) {
      infile <- input$file1
      df1 <-  read_excel(paste(infile$datapath, ".xlsx", sep = ""), 1)
      df2 <-  read_excel(paste(infile$datapath, ".xlsx", sep = ""), 2)
      write.csv(transformFile(df1, df2), file, row.names = FALSE)
    }
  )
}

shinyApp(ui, server)

这就是错误:

  

if(multiple)inputTag $ attribs $ multiple&lt; - “multiple”时出错:        论证不能被解释为合乎逻辑的      另外:警告信息:      if if(multiple)inputTag $ attribs $ multiple&lt; - “multiple”:        条件的长度> 1,只使用第一个元素

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

您将downloadButton()置于您的界面定义中fileInput()

fileInput('file1', 'Choose xlsx file',
        accept = c(".xlsx"),
        downloadButton('file2', "Download modified file")
      )

这可以解决您的错误

ui <- fluidPage(
  titlePanel("Use readxl"),
  sidebarLayout(
    sidebarPanel(
      fileInput('file1', 'Choose xlsx file',
                accept = c(".xlsx")),
      downloadButton('file2', "Download modified file")
    ),
    mainPanel(
      tableOutput('contents'))
  )
)