Button extension to download all data or only visible data

霸气de小男生 提交于 2020-04-08 10:14:21

问题


With the button extension to DT package, is there a way to specify that the buttons download either (1) all the data feeding the datatable, or (2) only the data on the visible page.

Below is the example from the documentation.

datatable(
  iris, extensions = 'Buttons', options = list(
    dom = 'Bfrtip',
    buttons = c('copy', 'csv', 'excel', 'pdf', 'print')
  )
)

回答1:


See this answer: Buttons: download button with scroller downloads only few rows

Whether the buttons export all data or only visible data is determined by the server argument in the DT::renderDT function call. If server=FALSE then the buttons will export all data in the table, while if server=TRUE they will only export visible data.

You could set the server argument with a variable to make this a selectable option.

output$table <- DT::renderDT(server = input$download_all, {
    DT::datatable( ... )
}

The other option you might want to look at is the exportOptions: modifier: selected option that determines whether to download only selected rows (the default) or all rows. You can read about that option here: https://datatables.net/extensions/buttons/examples/print/select.html

Note that your users might run into performance and memory issues using server=FALSE if your data table is very large.




回答2:


you are looking for the modifiers: page: selected. here is a working example

ui <- fluidPage(
  title = "Examples of DataTables",
  sidebarLayout(
    mainPanel(
      tabsetPanel(
        id = 'dataset',
        tabPanel("diamonds", DT::dataTableOutput("mytable1"))
      )
    )
  )
)

server <- function(input, output) {

  # choose columns to display
  diamonds2 = diamonds[sample(nrow(diamonds), 1000), ]
  output$mytable1 <- DT::renderDataTable({
    DT::datatable(diamonds2,
                  extensions = 'Buttons',
                  options = list(
                    dom = 'Bfrtip',
                    buttons = 
                      list(
                        list(
                        extend = 'csv',
                        buttons = c('csv'),
                        exportOptions = list(
                          modifiers = list(page = "current")
                        )
                      ))
                    )
                  )
  })

}

shinyApp(ui, server)

hope this helps!




回答3:


As @divibisan said, one option is to use the server argument of renderDT() to control whether the download button will download only the current or all rows.

That would work well if you want to have one download button. However if you want to have two buttons always appear, where one download the current page and one downloads the full dataset, you can use the following code:

library(shiny)

ui <- fluidPage(
  DT::DTOutput("table")
)

server <- function(input, output, session) {
  output$table <- DT::renderDT(server = FALSE, {
    DT::datatable(
      mtcars,
      extensions = c("Buttons"),
      options = list(
        dom = 'Bfrtip',
        buttons = list(
          list(extend = "csv", text = "Download Current Page", filename = "page",
               exportOptions = list(
                 modifier = list(page = "current")
               )
          ),
          list(extend = "csv", text = "Download Full Results", filename = "data",
               exportOptions = list(
                 modifier = list(page = "all")
               )
          )
        )
      )
    )
  })
}

shinyApp(ui, server)


来源:https://stackoverflow.com/questions/50508854/button-extension-to-download-all-data-or-only-visible-data

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!