2017-10-19 2 views
4

Hier ist das einfache Beispiel. Angenommen, ich schaue auf die Tabelle, und ich möchte die Tabelle mit Ausnahme der Spalte Sepal.Length herunterladen.R DT-Paket-Schaltfläche zum Herunterladen von Dateien enthält keine Anzeigetabellen

Was soll ich tun? Ich versuche, die Sepal.Length-Spalte auszuschalten, und klicken Sie auf Excel, aber es gibt immer noch die ganzen Daten. Ich will es nicht. Kann ich das irgendwie manipulieren?

Vielleicht bin ich nicht vertraut mit, wie es im Backend funktioniert, nachdem ich Zeile Reorder-Erweiterung oder Such/Filter-Tabellen verwenden, dann ist die heruntergeladene Dateien, welche Tabelle angezeigt wird. Ich möchte etwas Ähnliches, wenn ich die Spalten verberge.

Dies ist nützlich, wenn ich zu viele Spalten in einer Tabelle habe und manchmal brauche ich nicht alle von ihnen.

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

Ich schätze wirklich Ihre Hilfe.

Antwort

0

können Sie verwenden input$tbl_columns_selected und input$tbl_rows_selected

Hier können Sie auswählen, Zeilen und Spalten (NB: Spalte klicken Sie auf das Etikett unter dem DT wählen)
Wenn Sie eine Auswahl an Spalten nur wollen, dann input$tbl_rows_selected entfernen und set target = 'column' nur

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

Hallo, vielen Dank für Ihre Antwort. Ich habe über Ihre Idee nachgedacht, checkBoxGroupInput zu verwenden, um die Tabellenspalten zu entscheiden, aber was ich suche, ist tatsächlich ein Feature oder Parameter, die im DT-Paket, so dass ich es in der Datentabelle Funktion manipulieren kann. Trotzdem schätze ich deine Hilfe. –

Verwandte Themen