在 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 按列搜索?