R DT包下载文件按钮不包括显示表

时间:2017-10-19 20:55:16

标签: r datatable shiny shinydashboard dt

这是一个简单的例子。 假设我正在查看表格,我想下载除Sepal.Length列之外的表格。

我该怎么办?我尝试将Sepal.Length列切换出来,然后单击excel,但它仍然提供了整个数据。我不想要它。有什么方法可以操纵这个吗?

也许我不熟悉它在后端运行的方式,在我使用行重新排序扩展或搜索/过滤表之后,下载的文件就是表格显示的内容。所以当我隐藏列时,我想要类似的东西。

当我在表中有太多列时,这很有用,有时候我不需要所有列。

library(shiny)
shinyApp(
  ui = fluidPage(DT::dataTableOutput('tbl')),
  server = function(input, output) {
    output$tbl = DT::renderDataTable(
      iris, extensions = "Buttons",
      options = list(dom = "Blfrtip", 
        buttons = list('copy', 'excel', 'print', 'colvis'))
    )
  }
)

我非常感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

您可以使用input$tbl_columns_selectedinput$tbl_rows_selected

在这里您可以选择行和列( NB:选择DT下方标签上的列点击
如果您只想在列上进行选择,请移除input$tbl_rows_selected并仅设置target = 'column'

library(shiny)
library(xlsx)
library(DT)

shinyApp(
  ui = fluidPage(
      DT::dataTableOutput('tbl')
      ,downloadButton("downloadData",label ="Download")
  ),

  server = function(input, output) {
    output$tbl = DT::renderDataTable(iris, selection = list(target = 'row+column'))

    myFilteredData <- reactive({
      df <- iris[input$tbl_rows_selected, input$tbl_columns_selected]
      if (length(input$tbl_columns_selected) == 1) {
        df <- as.data.frame(df)
        colnames(df) <- colnames(iris)[input$tbl_columns_selected]
      }
      df
    })

    output$downloadData <- downloadHandler(
      filename = function() {paste("test.xlsx")},
      content = function(file) {
        write.xlsx(myFilteredData(),file, row.names=FALSE)
      })
  }
)