2016-08-24 92 views
1

對於提出所有這些基本問題,我感到有點無聊,但是我找不到任何這方面的內容。我想讓我的用戶在點擊我的表格的'excel'按鈕時爲其命名。下載對話框打開,或者另一個用戶界面彈出,他們可以輸入名稱。那可能嗎?目前,該名稱等於應用程序的標籤。自定義按鈕擴展名的文件名下載

rm(list=ls()) 
library(shiny) 
library(datasets) 
library(DT) 
library(data.table) 
DT<-data.table(matrix(abs(rnorm(600*40,sd=100)),nrow=600)) 

server<-shinyServer(function(input, output) { 
    output$view <- DT::renderDataTable(
    DT[,.SD],extensions = c('FixedHeader','Buttons'), 
     options=list(pageLength=60,fixedHeader = TRUE,dom = 'Bfrtip',buttons = c('csv', 'excel' ))) 
}) 

ui<-shinyUI(fluidPage(
    titlePanel("Shiny MWE"), 
     DT::dataTableOutput("view") 
    )) 

runApp(list(ui=ui,server=server)) 
+0

我不相信這是可能的。文件名是選項中的參數,請參閱:https://github.com/rstudio/DT/issues/343#issuecomment-239600594,並且選項沒有反應性,所以每次更改文件名時都必須重新繪製表格。 – Carl

+0

但是,然後我可以在某處添加文件名選項來選擇不同的名稱? –

+0

是的,將在電腦前發佈回答 – Carl

回答

5

可以使反應datatable,然後傳遞到renderDataTable,但它會在每次更改文件名時重新解析:

rm(list=ls()) 
library(shiny) 
library(datasets) 
library(DT) 
library(data.table) 
DT<-data.table(matrix(abs(rnorm(600*40,sd=100)),nrow=600)) 

server<-shinyServer(function(input, output) { 

    dt <- reactive({ 
    DT::datatable(DT[,.SD],extensions = c('FixedHeader','Buttons'), 
    options=list(pageLength=60,fixedHeader = TRUE,dom = 'Bfrtip', 
       buttons = list("csv",list(extend='excel',filename=input$filename)))) 
    }) 

    output$view <- DT::renderDataTable(
    dt(),server=FALSE 
    ) 
}) 

ui<-shinyUI(fluidPage(
    titlePanel("Shiny MWE"), 
    textInput("filename","Enter file name"), 
    DT::dataTableOutput("view") 
)) 

runApp(list(ui=ui,server=server)) 
+1

同時感謝我切換到下載處理程序,也因爲我的應用程序變慢,使用服務器= FALSE選項。 –