【问题标题】:Button extension to download all data or only visible data用于下载所有数据或仅可见数据的按钮扩展
【发布时间】:2018-11-03 15:39:23
【问题描述】:

使用 DT 包的按钮扩展,有没有办法指定按钮下载 (1) 提供数据表的所有数据,或 (2) 仅下载可见页面上的数据。

以下是来自documentation 的示例。

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

【问题讨论】:

  • 按钮已经做了第二件事。当您在搜索栏中输入“setosa”时,只需点击复制按钮即可。如果你不应用任何过滤器,你会得到第一个。所以我看不出这里的问题是什么

标签: r shiny dt


【解决方案1】:

看到这个答案:Buttons: download button with scroller downloads only few rows

按钮是导出所有数据还是仅导出可见数据由DT::renderDT 函数调用中的server 参数决定。如果server=FALSE,那么按钮将导出表中的所有数据,而如果server=TRUE,它们只会导出可见数据。

您可以使用变量设置 server 参数以使其成为可选选项。

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

您可能想要查看的另一个选项是exportOptions: modifier: selected 选项,该选项确定是仅下载选定的行(默认)还是所有行。您可以在此处阅读有关该选项的信息:​​https://datatables.net/extensions/buttons/examples/print/select.html

请注意,如果您的数据表非常大,您的用户可能会在使用 server=FALSE 时遇到性能和内存问题。

【讨论】:

    【解决方案2】:

    您正在寻找modifiers: page: selected。这是一个工作示例

    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)
    

    希望这会有所帮助!

    【讨论】:

    • 提供的代码没有运行,我相信即使没有你添加的选项它也只会打印当前页面。
    【解决方案3】:

    正如@divibisan 所说,一种选择是使用renderDT()server 参数来控制下载按钮是仅下载当前行还是所有行。

    如果您想要一个下载按钮,那会很好用。但是,如果您希望始终显示两个按钮,一个下载当前页面,一个下载完整数据集,您可以使用以下代码:

    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)
    

    【讨论】:

    • 嗨 DeanAttali,这个解决方案对我不起作用。当我单击下载完整结果时,仍然是单个页面的下载数据。有什么想法吗?难道是因为我的是一个renderDataTable?还是因为我有 extensions = c("Buttons","FixedColumns") ?
    • 没有看到您的代码,没有人可以回答这个问题,但您应该尝试复制我在答案中的确切代码,以确定您是否做错了什么。如果我提供的确切代码对您有不同的行为,则说明包有问题。
    • 嗨@DeanAttali 这个解决方案效果很好,谢谢。然而,这在闪亮的模块中使用时不起作用。不确定,但我猜想与 Buttons 扩展的命名空间有关
    • 这不是我的经验,我相信它适用于模块。如果您认为没有,那么您应该创建一个最小的可重现示例,表明此功能在模块中已损坏,并将其作为问题提交到包中。
    • @DeanAttali 它也完全适用于模块。我的错,错过了server = FALSE 部分
    猜你喜欢
    • 2019-03-22
    • 2016-10-18
    • 2019-11-01
    • 1970-01-01
    • 2021-10-11
    • 2021-11-13
    • 2017-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多