简体   繁体   English

DT 无格式导出 R Shiny

[英]DT export without format R Shiny

I am exporting data with the button extension of DT .我正在使用DT的按钮扩展名导出数据。 When clicking on copy or excel or pdf , format is also exported.单击copyexcelpdf时,也会导出格式。

DT version 0.14 include format contrary to the old version 0.5 that is the comportement needed. DT版本 0.14 包含与旧版本 0.5 相反的格式,这是所需的行为。

Reproducible exemple, Sepal.Width column with unit in meters in table that I don't want to export:可重现的示例, Sepal.Width列,表中的单位为米,我不想导出:

library(shiny)
library(DT)

ui <- fluidPage(
    dataTableOutput("dt_table")
)

server <- function(input, output) {

    output$dt_table <- renderDataTable({
        datatable(
            iris,
            options = list(dom = 'lBfrtip', buttons = c('copy','excel', 'pdf')),
            extensions = 'Buttons'
        ) %>% formatString(
            columns = 'Sepal.Width',
            suffix = " meters"
        )
    })
}

shinyApp(ui = ui, server = server)

Do you know any argument to export dataset without formating?您知道导出数据集而不格式化的任何论据吗?

Thanks for any help.谢谢你的帮助。

Here is a way:这是一种方法:

library(shiny)
library(DT)

ui <- fluidPage(
  DTOutput("dt_table")
)

render <- c(
  "function(data, type, row, meta){",
  "  if(type === 'display'){",
  "    return data + ' meters';",
  "  }else{",
  "    return data;",
  "  }",
  "}"
)

server <- function(input, output) {
  
  output$dt_table <- renderDT({
    datatable(
      iris,
      options = list(
        dom = 'lBfrtip', 
        buttons = list(
          list(
            extend = "copy",
            exportOptions = list(orthogonal = "export")
          ),
          list(
            extend = "excel",
            exportOptions = list(orthogonal = "export")
          ),
          list(
            extend = "pdf",
            exportOptions = list(orthogonal = "export")
          )
        ),
        columnDefs = list(
          list(targets = 2, render = JS(render))
        )
      ),
      extensions = 'Buttons'
    )
  })
  
}

shinyApp(ui = ui, server = server)

EDIT编辑

Another way:另一种方式:

tplString2 <- function(prefix, suffix, ...) {
  sprintf(
    "type === 'display' ? DTWidget.formatString(data, %s, %s) : data;",
    DT:::jsValues(prefix), DT:::jsValues(suffix)
  )
}

formatString2 <- function(table, columns, prefix = '', suffix = '') {
  DT:::formatColumns(table, columns, tplString2, prefix, suffix)
}

tplDate2 <- function(method, params, ...) {
  params = if (length(params) > 0) paste(',', jsonlite::toJSON(params)) else ''
  sprintf(
    "type === 'display' ? DTWidget.formatDate(data, %s%s) : data;", 
    DT:::jsValues(method), params
  )
}

formatDate2 <- function(table, columns, method = 'toDateString', params = NULL) {
  if (!inherits(table, 'datatables'))
    stop("Invalid table argument; a table object created from datatable() was expected")
  x = table$x
  if (x$filter != 'none') {
    if (inherits(columns, 'formula')) columns = all.vars(columns)
    colnames = base::attr(x, 'colnames', exact = TRUE)
    rownames = base::attr(x, 'rownames', exact = TRUE)
    if (is.null(params)) params = list()
    cols = sprintf("%d", DT:::name2int(columns, colnames, rownames))
    x$filterDateFmt = as.list(x$filterDateFmt)
    for (col in cols) x$filterDateFmt[[col]] = list(
      method = method, params = jsonlite::toJSON(params)
    )
    table$x = x
  }
  DT:::formatColumns(table, columns, tplDate2, method, params)
}

library(shiny)
library(DT)

server <- function(input, output) {
  
  output$dt_table <- renderDT({
    datatable(
      iris,
      options = list(
        dom = 'lBfrtip', 
        buttons = list(
          list(
            extend = "copy",
            exportOptions = list(orthogonal = "export")
          ),
          list(
            extend = "excel",
            exportOptions = list(orthogonal = "export")
          ),
          list(
            extend = "pdf",
            exportOptions = list(orthogonal = "export")
          )
        )
      ),
      extensions = 'Buttons'
    ) %>% 
     formatString2(columns = 1, suffix = " meters")
  })
  
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM