2017-10-19 15 views
4

Voici un exemple simple. Supposons que je regarde la table, et je veux télécharger la table en excluant la colonne Sepal.Length.R Le bouton du paquet DT pour télécharger les fichiers n'inclut pas les tables d'affichage

Que dois-je faire? J'essaie de basculer la colonne Sepal.Length, et cliquez sur Excel, mais il me donne toujours les données entières. Je ne le veux pas. Est-il possible que je puisse manipuler cela? Peut-être que je ne suis pas familier avec son fonctionnement dans le backend, après que j'utilise l'extension de réorganisation de ligne, ou les tables de recherche/filtrage, alors les fichiers téléchargés sont ce que la table affiche. Donc je veux quelque chose de similaire quand je cache les colonnes. Ceci est utile quand j'ai trop de colonnes dans une table et parfois je n'ai pas besoin de toutes.

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')) 
    ) 
    } 
) 

J'apprécie vraiment votre aide.

Répondre

0

Vous pouvez utiliser input$tbl_columns_selected et input$tbl_rows_selected

Ici, vous pouvez sélectionner des lignes et des colonnes (NB: pour sélectionner la colonne, cliquez sur l'étiquette en dessous du DT)
Si vous souhaitez une sélection uniquement sur les colonnes puis retirez input$tbl_rows_selected et mettre target = 'column' seulement

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) 
     }) 
    } 
) 
+0

Salut, merci beaucoup pour votre réponse. J'ai pensé à votre idée d'utiliser checkBoxGroupInput pour décider des colonnes de la table, mais ce que je cherche, c'est en fait une fonction ou des paramètres du paquet DT que je peux manipuler dans la fonction datatable. J'apprécie quand même votre aide. –