【问题标题】:Add download buttons in DT::renderDataTable在 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 参数,所有功能都可以工作?

标签: r shiny dt


【解决方案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 中也有添加下载按钮的功能。请参阅 hereherehere 了解更多信息。
    猜你喜欢
    • 2018-10-07
    • 2018-10-08
    • 1970-01-01
    • 2021-06-22
    • 2020-09-18
    • 2020-05-02
    • 1970-01-01
    • 2021-03-05
    • 1970-01-01
    相关资源
    最近更新 更多