这是一个简单的例子。 假设我正在查看表格,我想下载除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'))
)
}
)
我非常感谢你的帮助。
答案 0 :(得分:0)
您可以使用input$tbl_columns_selected
和input$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)
})
}
)