我使用data.substr来截断数据表中的长单词.但是,当我try 使用按钮扩展来导出表时,导出的表包含由"..."表示的截断单词.而不是整个单词.

有没有办法显示"..."在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)

注意:我不想使用下载导出表(注:-)

谢谢你的帮忙

我试过使用省略号插件,但我得到了同样的结果.

推荐答案

您可以使用orthogonal data:

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"不起作用.

Javascript相关问答推荐

更新Reduxstore 中的状态变量,导致整个应用程序出现不必要的重新渲染

从连接字符串创建客户端时,NodeJS连接到CosmosDB失败

从实时数据库(Firebase)上的子类别读取数据

通过嵌套模型对象进行Mongoose搜索

为什么当我解析一个promise时,输出处于挂起状态?

在服务器上放置了Create Reaction App Build之后的空白页面

如何将react—flanet map添加到remixjs应用程序

使用Promise.All并发解决时,每个promise 的线性时间增加?

material UI按钮组样式props 不反射

在HTML语言中调用外部JavaScript文件中的函数

是否可以在Photoshop CC中zoom 路径项?

Node.js错误: node 不可单击或不是元素

如何在脚本编译后直接将RxJ模块导入浏览器(无需Angel、webpack、LiteServer)

在SuperBase JS客户端中寻址JSON数据

如果NetSuite中为空,则限制筛选

Pevent触发material 用户界面数据网格中的自动保存

Angel Auth Guard-用户只有在未登录时才能访问登录页面,只有在登录时才能访问其他页面

Promise.race()返回已解析的promise ,而不是第一个被拒绝的promise

$GTE的mongoose 问题

Plotly.js栏为x轴栏添加辅助文本