2016-08-24 91 views
0

是否可以调整Excel输出的输出? 我希望能够按照紧迫性做下列事情。自定义按钮扩展excel导出的输出

  1. 添加一个头,其中包括一些文本的表格“这个表是根据虹膜数据集,并使用输入$宽度作为最小的”
  2. 的厚底部边界添加到列名头
  3. 添加左边框的第一列后
  4. 添加页眉
  5. 在那里我可以写的东西到一些合并单元格,即我还想写“花瓣大小”长度的四列以上,宽度以上的空行,。 ..

这就是使用按钮扩展的MWE。我发现原来javascrtip DT here一些信息,但就是有点太难为我转移到R.

rm(list=ls()) 
    library(shiny) 
    library(datasets) 
    library(DT) 
    library(data.table) 
    DT<-data.table(iris) 
    server<-shinyServer(function(input, output) { 
     output$view <- DT::renderDataTable(
     DT[Sepal.Width<=input$width,.SD],extensions = c('FixedHeader','Buttons'), 
      options=list(pageLength=60,fixedHeader = TRUE,dom = 'Bfrtip',buttons = c('csv', 'excel' ))) 
    }) 

    ui<-shinyUI(fluidPage(
     titlePanel("Shiny MWE"), 
     sidebarLayout(
      sidebarPanel(
      sliderInput("width", label = h3("Min width"), 
         min=min(DT$Sepal.Width), max=max(DT$Sepal.Width), value=mean(DT$Sepal.Width), 
         )), 

     mainPanel(
      DT::dataTableOutput("view") 
     ) 
    ) 
    )) 

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

您可以使用r库(例如xlsx)创建下载按钮并写入xlsx, – Batanichek

回答

1

我也意识到,我不得不放弃“按钮”扩展名,其他原因好。例如,excel下载按钮只导出应用程序中的视图,而不是整个数据集。 (可以通过选项server = FALSE来修复,这对于较大的数据集来说太慢了)

我选择了openxlsx软件包,它需要安装Rtools,我遇到了一些困难(找到了解决方案它添加到Windows路径([Error: zipping up workbook failed when trying to write.xlsx

所以我贴的代码大多是做什么,我想我也可以继续使用openxlsx命令。没有与XLSX包或其他,我也有安装麻烦的替代品。

rm(list=ls()) 
    library(shiny) 
    library(datasets) 
    library(DT) 
    library(data.table) 
    library(openxlsx) 

    DT<-data.table(iris) 
    # Style created for openxlsx see help 
    hs <- createStyle(textDecoration = "BOLD", fontColour = "#FFFFFF", fontSize=12, 
    fgFill = "#177B57",border="Bottom",borderStyle=c("thick")) 
    #Server 
    server<-shinyServer(function(input, output) { 
     output$view <- DT::renderDataTable(
     DT[Sepal.Width<=input$width,.SD],extensions = c('FixedHeader'), 
      options=list(pageLength=20,fixedHeader = TRUE,dom = 'frtip')) 
    #Include DownloadHandler 
     output$downloadData <- downloadHandler(
    filename = function() { paste0("test.xlsx") }, 
    content = function(file) { 
     wb<-createWorkbook() # Create wb in R 
     addWorksheet(wb,sheetName="Output") #create sheet 
     #Creates a Data Table in Excel if you want, otherwhise only use write Data 
     writeDataTable(wb,1, DT[Sepal.Width<=input$width,.SD], colNames = TRUE, headerStyle = hs,startRow=2,tableStyle = "TableStyleLight1") 
     mergeCells(wb,sheet = "Output", cols=1:5, rows=1) 
     writeData(wb,1, "Include text also based on reactive function and in merged cells") 
     saveWorkbook(wb, file = file, overwrite = TRUE) 
     }, 
     contentType= "excel/xlsx") 
     }) 

    ui<-shinyUI(fluidPage(
     titlePanel("Shiny MWE"), 
     sidebarLayout(
      sidebarPanel(
      sliderInput("width", label = h3("Min width"), 
         min=min(DT$Sepal.Width), max=max(DT$Sepal.Width), value=mean(DT$Sepal.Width), 
         ), 
       downloadButton('downloadData', 'Download')), 

     mainPanel(
      DT::dataTableOutput("view") 
     ) 
    ) 
    )) 

    runApp(list(ui=ui,server=server),launch.browser=T) # Download button only works in browser