【问题标题】:Need to upload an Excel file into Shiny and save in S3需要将 Excel 文件上传到 Shiny 并保存在 S3 中
【发布时间】:2025-12-26 11:55:16
【问题描述】:

我需要将一个 excel 文件上传到我的 Shiny App 中,然后将文件保存到 S3 中。

问题是我在 Excel 文件中有多个工作表需要保留。

当我将文件上传到 Shiny 时,它一次只允许我上传一张纸。当我将此工作表保存到 S3 中时,我会丢失所有格式和公式。只会保存一张只包含值的工作表,就像 .csv 或 R 数据框一样。

我想知道是否有任何解决方法?任何帮助将非常感激。

【问题讨论】:

    标签: r excel amazon-s3 shiny


    【解决方案1】:

    试试这个:

    library(shiny)
    
    # Define UI for data upload app ----
    ui <- fluidPage(
    
      # App title ----
      titlePanel("Uploading Files"),
    
      # Sidebar layout with input and output definitions ----
      sidebarLayout(
    
        # Sidebar panel for inputs ----
        sidebarPanel(
    
          # Input: Select a file ----
          fileInput("file1", "Choose CSV File",
                    multiple = TRUE,
                    accept = c("text/csv",
                             "text/comma-separated-values,text/plain",
                             ".csv")),
    
          # Horizontal line ----
          tags$hr(),
    
          # Input: Checkbox if file has header ----
          checkboxInput("header", "Header", TRUE),
    
          # Input: Select separator ----
          radioButtons("sep", "Separator",
                       choices = c(Comma = ",",
                                   Semicolon = ";",
                                   Tab = "\t"),
                       selected = ","),
    
          # Input: Select quotes ----
          radioButtons("quote", "Quote",
                       choices = c(None = "",
                                   "Double Quote" = '"',
                                   "Single Quote" = "'"),
                       selected = '"'),
    
          # Horizontal line ----
          tags$hr(),
    
          # Input: Select number of rows to display ----
          radioButtons("disp", "Display",
                       choices = c(Head = "head",
                                   All = "all"),
                       selected = "head")
    
        ),
    
        # Main panel for displaying outputs ----
        mainPanel(
    
          # Output: Data file ----
          tableOutput("contents")
    
        )
    
      )
    )
    
    # Define server logic to read selected file ----
    server <- function(input, output) {
    
      output$contents <- renderTable({
    
        # input$file1 will be NULL initially. After the user selects
        # and uploads a file, head of that data file by default,
        # or all rows if selected, will be shown.
    
        req(input$file1)
    
        df <- read.csv(input$file1$datapath,
                 header = input$header,
                 sep = input$sep,
                 quote = input$quote)
    
        if(input$disp == "head") {
          return(head(df))
        }
        else {
          return(df)
        }
    
      })
    
    }
    # Run the app ----
    shinyApp(ui, server)
    

    或者……这个……

    library(shiny)
    library(readxl)
    
    ui <- fluidPage(
      fileInput('file1', 'Insert File', accept = c(".xlsx")),
      textInput('file1sheet','Name of Sheet (Case-Sensitive)'),
      tableOutput("value")
    )
    
    server <- function(input, output) {
    
      sheets_name <- reactive({
        if (!is.null(input$file1)) {
          return(excel_sheets(path = input$file1$datapath))  
        } else {
          return(NULL)
        }
      })
    
      output$value <- renderTable({
        if (!is.null(input$file1) && 
            (input$file1sheet %in% sheets_name())) {
          return(read_excel(input$file1$datapath, 
                            sheet = input$file1sheet))
        } else {
          return(NULL)
        }
      })
    }
    
    shinyApp(ui, server)
    

    【讨论】:

    • 谢谢!这个解决方案肯定有效,但不完全是我想要的。有没有办法将 Excel 文件存储在 shinyio 中,然后使用闪亮的前端从服务器下载?
    最近更新 更多