按钮:带有滚动条的下载按钮仅下载几行

Posted

技术标签:

【中文标题】按钮:带有滚动条的下载按钮仅下载几行【英文标题】:Buttons: download button with scroller downloads only few rows 【发布时间】:2016-11-23 11:01:07 【问题描述】:

我正在处理超过 100 000 行的表格,并使用 DT 包(开发版本 0.1.56)在 Shiny App 中对其进行可视化。

此外,我使用DT 扩展为:Buttons,以下载不同格式的数据。但是,虽然Scroller 扩展程序也已激活,但我只能下载几行(不是所有数据)。

示例代码:

library("shiny")
library("DT")

shinyApp(
  ui = fluidPage(DT::dataTableOutput('tbl')),
  server = function(input, output) 
    output$tbl = DT::renderDataTable(
      iris,extensions=c("Buttons",'Scroller'),options = list(dom = 'Bfrtip',
                                               buttons = c('copy', 'csv', 'excel', 'pdf', 'print'),scrollY = 50,
                                               scroller = TRUE
      ))
  
)

另外,如果我只在 R 中运行这部分代码并在查看器中获取数据表,我可以复制所有行等,这怎么可能?

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

我尝试了不同的方法:

    在选项列表中更改scrollY = ... -> 它正在工作,但scrollY 的数量必须很大才能实际显示所有数据行,以便可以完全下载 -> 不好方法,因为我的数据来自数据库,所以我获得了不同数量的行加上它使应用程序非常慢

    使用 pageLength 选项:pageLength = ..., lengthMenu=c(..,..,..,..)

但是选择的选项根本不显示...

有什么想法可以解决这个问题吗?

我知道 downloadHandler() 方法,但是我更愿意通过 DT 来完成它,因为可用的扩展程序提供了漂亮而优雅的方式,它允许下载数据一次以不同的格式,如 pdf、excel、csv 和打印。

**我已经看到了同样的问题:

Download button downloads only 145 rows in DataTables with Scroller

但是在DT包的意思中没有回答

提前致谢

【问题讨论】:

如果在DT::renderDataTable 中添加server=FALSE 会发生什么? 嗨,Carl,实际上效果很好!谢谢!如果您将其发布为答案,我将立即接受它 【参考方案1】:

问题是当server=TRUE 时,只有正在显示的数据被发送到客户端。设置 server=FALSE 会在客户端呈现所有 DT 内容,因此所有数据都在那里。

【讨论】:

当我使用 server = FALSE 时出现此错误:DataTables 警告:table id=DataTables_Table_0 - JSON 响应无效。有关此错误的更多信息,请参阅datatables.net/tn/1【参考方案2】:

确实是server = TRUE 成功了。

这是代码,因为像我这样的人可能会将参数放在错误的位置。

library("shiny")
library("DT")

shinyApp(
  ui = fluidPage(DT::dataTableOutput('tbl')),
  server = function(input, output) 
    output$tbl = DT::renderDataTable(server = FALSE,
      DT::datatable(iris,
                    extensions=c("Buttons",'Scroller'),
                    options = list(dom = 'Bfrtip',
                                   buttons = c('copy', 'csv', 
                                               'excel', 'pdf', 
                                               'print'),
                                   scrollY = 50,
                                   scroller = TRUE)
      )
    )
  
)

【讨论】:

当我使用 server = FALSE 时出现此错误:DataTables 警告:table id=DataTables_Table_0 - JSON 响应无效。有关此错误的更多信息,请参阅 datatables.net/tn/1

以上是关于按钮:带有滚动条的下载按钮仅下载几行的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Tkinter 中获得带有滚动条的 Frame?

html编程,如何设置滚动条的位置

css嵌入没有滚动条

滚动条的实现思路

VC中怎么滚动条宽度怎么解决

怎样改变框架滚动条的样式 急!!!