导出带有闪亮换行符的数据表

问题描述 投票:0回答:1

我正在使用

data.substr
截断数据表中的长单词。但是,当我尝试使用按钮扩展导出表格时,导出的表格包含由“...”表示的截断单词,而不是整个单词。

有没有办法在Shiny应用程序中显示“...”,同时确保整个表格不被截断导出到Excel?

这是一个可重现的示例:

library(shiny)

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

server <- function(input, output, session) {
  dt = data.frame(x=c("blablablablablablablablablablablablal","blablablablablablablablablablablablal"),y=c(1,2))
  output$test <- renderDataTable({
    datatable(dt, rownames = TRUE,
                   extensions = 'Buttons',escape=FALSE,class = 'cell-border stripe',
                   selection = list( mode="single"),
                   option=list(dom = "Bt",buttons = list("copy", list(extend = "collection", buttons = c("csv", "excel"), text = "Download") ),
                               columnDefs = list(list(
                                 targets = c(0,1),
                                 render = JS(
                                   "function(data, type, row, meta) {",
                                   "return type === 'display' && data != null && data.length > 35 ?",
                                   "'<span title=\"' + data + '\">' + data.substr(0, 8) + '...</span>' : data;",
                                   "}")
                               ))
                   )
    )
                   
  })
}

shinyApp(ui, server)

注意:我不想使用 downloadHandler 导出表:-)

感谢您的帮助

我尝试使用省略号插件,但得到了相同的结果。

javascript r shiny datatables dt
1个回答
0
投票

您可以使用正交数据来做到这一点:

library(DT)

dt <- data.frame(
  x = c(
    "blablablablablablablablablablablablal",
    "blablablablablablablablablablablablal"
  ),
  y = c(1,2)
)

datatable(
  dt, rownames = TRUE,
  extensions = "Buttons", class = "cell-border stripe",
  selection = list(mode = "single"),
  options = list(
    dom = "Bt",
    buttons = list(
      "copy", 
      list(
        extend = "excel", 
        text = "Download",
        exportOptions = list(
          orthogonal = "export"
        )
      )
    ),
    columnDefs = list(list(
      targets = c(0, 1),
      render = JS(
        "function(data, type, row, meta) {",
        "  if(type === 'export') {",
        "    return data;",
        "  }",
        "  return type === 'display' && data != null && data.length > 35 ?",
        "    '<span title=\"' + data + '\">' + data.substr(0, 8) + '...</span>' : data;",
        "}")
    ))
  )
)

这不适用于

extend = "collection"

© www.soinside.com 2019 - 2024. All rights reserved.