在 DT::renderDataTable 中添加下载按钮

Posted

技术标签:

【中文标题】在 DT::renderDataTable 中添加下载按钮【英文标题】:Add download buttons in DT::renderDataTable 【发布时间】:2018-10-06 22:17:36 【问题描述】:

我正在尝试在我的 R Shiny 应用程序的表格上方添加下载按钮('copy'、'csv'、'excel'、'pdf'),但在使用内部数据表时,renderDataTable 似乎不起作用。

output$mytable1  <- DT::renderDataTable(
        datatable(
             plots.dfs()[[1]] ,
        rownames = TRUE,
        options = list(
            fixedColumns = TRUE,
            autoWidth = TRUE,
            ordering = FALSE,
            dom = 'tB',
            buttons = c('copy', 'csv', 'excel', 'pdf')
        ),
        class = "display"
    ))

当我在没有 DT::datatable 的情况下使用 DT::renderDataTable 时,renderDataTable 运行良好,并且我拥有所有功能(过滤器、搜索字段等),除了下载按钮(我要添加的)

output$mytable1 = DT::renderDataTable( plots.dfs()[[1]] )

你知道我做错了什么吗?感谢您的帮助

【问题讨论】:

您的datatable() 中的extensions = 'Buttons' 命令在哪里? 谢谢,按钮现在出现了,但是所有的 renderDataTable 功能都消失了(列过滤器、搜索框、行选择、分页等)......你知道如何让它们重新出现吗? ? 检查 table 希望您的功能在绿色框中。 我使用的是 Firefox Quantum 59.0.2(64 位)。当我只使用 renderDataTable 一切正常(但当然,按钮不存在) output$mytable1 = DT::renderDataTable( plots.dfs()[[1]] ) 所以没有extensions 参数,所有功能都可以工作? 【参考方案1】:

当我偶然发现这个解决方案时,它可以工作,但禁用了搜索和分页。添加一个最终对我有用的解决方案(dom = 'Bfrtip'):

datatable(data, extensions = "Buttons", 
            options = list(paging = TRUE,
                           scrollX=TRUE, 
                           searching = TRUE,
                           ordering = TRUE,
                           dom = 'Bfrtip',
                           buttons = c('copy', 'csv', 'excel', 'pdf'),
                           pageLength=5, 
                           lengthMenu=c(3,5,10) ))

【讨论】:

【参考方案2】:

添加一个关于允许下载整个表格的更明确的答案,因为我认为应该更清楚地概述它。使用renderDT() 下载按钮仅下载当前显示的数据。您可以使用renderDT(server = FALSE, ) 使按钮下载整个数据集,如下所示:

renderDT(server=FALSE,
  # Load data
  data <- mtcars
  # Show data
  datatable(data, extensions = 'Buttons', 
            options = list(scrollX=TRUE, lengthMenu = c(5,10,15),
                           paging = TRUE, searching = TRUE,
                           fixedColumns = TRUE, autoWidth = TRUE,
                           ordering = TRUE, dom = 'tB',
                           buttons = c('copy', 'csv', 'excel','pdf')))
)

【讨论】:

由于dom='tB',这种方法会禁用搜索栏和页面过滤。您知道使用这种方法恢复这种情况的方法吗? 是的,遇到与@bmc 相同的问题,这会禁用搜索和分页【参考方案3】:

正如斯蒂芬在评论中所说,添加按钮的方法如下:

output$mytable1  <- DT::renderDataTable(
                        DT::datatable(
                             plots.dfs()[[1]] ,

                            extensions = 'Buttons',

                            options = list(
                                paging = TRUE,
                                searching = TRUE,
                                fixedColumns = TRUE,
                                autoWidth = TRUE,
                                ordering = TRUE,
                                dom = 'tB',
                                buttons = c('copy', 'csv', 'excel')
                            ),

                            class = "display"
                       ))

【讨论】:

谢谢,它工作得很好,但是是否有一个选项可以下载所有数据(在其他分页内)而不是“仅”显示的数据? 该方法是在renderDataTable 中添加server = FALSE 以允许它获取整个表格而不仅仅是显示的部分,但现在Shiny 中也有添加下载按钮的功能。请参阅 here、here 和 here 了解更多信息。

以上是关于在 DT::renderDataTable 中添加下载按钮的主要内容,如果未能解决你的问题,请参考以下文章

在 R Shiny 中使用 DT::renderDataTable 时如何抑制行名?

R Shiny DT::renderDataTable ...如何在下载的表格中自定义标题

有没有办法使用 Shiny 更新的 DT::renderDataTable 和 DT::dataTableOutput 按列搜索?

单击某行时如何制作弹出窗口

初始 DT 处理的网络请求缓慢

缩小 DT::dataTableOutput 大小