Скачать в формате как Excel R Shiny? - PullRequest
0 голосов
/ 28 марта 2020

Эта загрузка объектов в R блестящий действительно вызывает у меня головную боль, хотя это казалось слишком простым, но я не знаю, как продолжать идти. Этот вопрос предназначен для загрузки вывода formattable в виде таблицы Excel, но я даже не уверен, совместимы ли они, или изображение может подойти. Здесь кажется, что что-то должно быть сделано, как я его кодировал, но каждый вопрос dowloadButton для построения графика вводит ввод графика отдельно от вывода, как я его настраивал, но он не работает, как я думаю. так что я не могу даже go опередить и проверить, сработает ли моя кнопка загрузки. Любые идеи или пути, которым нужно следовать, будут полностью оценены!

library(openxlsx)
library(shiny)
library(formattable)

ui <- fluidPage(

  fluidRow(
    sidebarPanel(
      hr(style="border-color: #606060;"),
      # Add bullets
      h3(HTML(paste0("<b>","Download","</b>"))),
      downloadButton(outputId = "table_dowload", 
                     label = "Download"),
      hr(style="border-color: #606060;"),
      width = 3
    ),
    mainPanel(
      br(),
      formattableOutput("info_company_table"),
      br()
    )
  )
)

server <- function(input, output, session) {

## Visualization input
table_input <- function(){

  bycompany <- structure(list(Parent = "Melissa", 
                              Active = 12681L, 
                              Claims = 16.22, 
                              Strength = 24.15, 
                              Backward = 6.37, 
                              Forward = 1.09), 
                         row.names = 1L, 
                         class = "data.frame")

  # Visualize top 10
  if(nrow(bycompany())>0) {
    t <- formattable(bycompany() %>%
                       arrange(desc(`Active`, )) %>%
                       slice(1:10),
                     align = "l",
                     list(
                       `Backward` = color_tile("white", "lightblue"),
                       `Forward` = color_tile("white", "lightblue"),
                       `Claims` = color_tile("white", "lightblue"),
                       `Strength` = color_tile("white", "lightblue"),
                       `Active` = color_tile("white", "lightblue")
                     ))
  } else {
    t <- formattable(data.frame())
  }

}

## Visualization 
output$table <- renderFormattable({

  table_input()

})

# DOWNLOAD

output$table_dowload <- downloadHandler(
  filename <- function(){
  paste("Table",
        Sys.Date(),
        "xlsx",
        sep = ".")
},
content = function(file) {
  write.xlsx(table_input(), file)
})

}
shinyApp(ui,server)

1 Ответ

1 голос
/ 28 марта 2020

У вас есть несколько вопросов внутри вашего вопроса. Во-первых, давайте обратимся к кнопке загрузки и форматируемой таблице, которая не отображается на главной панели. Ваша кнопка загрузки не работает, потому что на стороне сервера вы определили фрейм данных bycompany как функцию (bycompany()), поэтому блестящий не распознает bycompany как фрейм данных. Таким образом, чтобы ваша кнопка загрузки работала, измените (внутри table_input функция) все bycompany() на bycompany.

Итак, ваш код выглядит следующим образом, и теперь кнопка загрузки работает:

library(openxlsx)
library(shiny)
library(formattable)
# I've also added dplyr for pipe operator
library(dplyr)
ui <- fluidPage(fluidRow(
  sidebarPanel(
    hr(style = "border-color: #606060;"),
    # Add bullets
    h3(HTML(paste0(
      "<b>", "Download", "</b>"
    ))),
    downloadButton(outputId = "table_dowload",
                   label = "Download"),
    hr(style = "border-color: #606060;"),
    width = 3
  ),
  mainPanel(br(),
            formattableOutput("info_company_table"),
            br())
))

server <- function(input, output, session) {
  ## Visualization input
  table_input <- function() {
    bycompany <- structure(
      list(
        Parent = "Melissa",
        Active = 12681L,
        Claims = 16.22,
        Strength = 24.15,
        Backward = 6.37,
        Forward = 1.09
      ),
      row.names = 1L,
      class = "data.frame"
    )

    # Visualize top 10
    if (nrow(bycompany) > 0) {
      t <- formattable(
        bycompany %>%
          arrange(desc(`Active`,)) %>%
          slice(1:10),
        align = "l",
        list(
          `Backward` = color_tile("white", "lightblue"),
          `Forward` = color_tile("white", "lightblue"),
          `Claims` = color_tile("white", "lightblue"),
          `Strength` = color_tile("white", "lightblue"),
          `Active` = color_tile("white", "lightblue")
        )
      )
    } else {
      t <- formattable(data.frame(t))
    }

  }

  ## Visualization
  output$table <- renderFormattable({
    table_input()

  })

  # DOWNLOAD

  output$table_dowload <- downloadHandler(
    filename <- function() {
      paste("Table",
            Sys.Date(),
            "xlsx",
            sep = ".")
    },
    content = function(file) {
      write.xlsx(table_input(), file)
    }
  )

}
shinyApp(ui, server)

Также обратите внимание, что если вы хотите визуализировать форматируемый на вашей главной панели, вы должны изменить эту часть

 ## Visualization
  output$table <- renderFormattable({
    table_input()

  })

На это, так как вы определили свою часть пользовательского интерфейса как formattableOutput("info_company_table")

          ## Visualization
          output$info_company_table <- renderFormattable({
            table_input()

          })

Относительно форматируемого (т. Е. Формата экспортируемых данных Excel) я мог найти только эту ссылку (которая не приносит решения) https://github.com/renkun-ken/formattable/issues/70

...