javascript - 如何将表格添加到我的 rmarkdown html 输出中,该表格将粘贴到带有格式的 Excel 中?

标签 javascript r r-markdown

我想在 rmarkdown 文件中创建按钮(或可选择的表格),允许用户复制表格并将其粘贴到带有一些预定义格式的 word 或 excel 中。
有没有办法生产:

  • 保留表格格式的复制功能,尤其是单元格的边框
  • 捕获整个表的复制函数

  • 使用这个非常简单的数据框:
    data<-data.frame(Variable=c('Amount','Age','Happiness','Favorite Color'),
                 Value=c(15,25,7,'Yellow'))
    
    我希望用户能够单击 html 文件中的按钮,这样当他们粘贴到 excel 或 word 中时,他们会看到:
    enter image description here
    或者
    enter image description here
    取决于指定的格式。
    就目前而言,我可以制作一个带有 kable 的单元格边框的表格。 ,
    data%>%
      kable("html",align = 'clc')%>%
      kable_styling(full_width = F,position="left",bootstrap_options = 
      c("striped","bordered"))
    
    enter image description here
    此表在使用 rmarkdown 生成的 html 文件中显示单元格边框并具有可接受的间距和清晰度(列足够宽以显示完整的列标题,并且网格清楚地定义了单元格。
    当我突出显示表格并将其粘贴到 Excel 中时,我得到:
    enter image description here
    一个不满意的结果。
    使用 DT 生成表, 我用:
    datatable(data,extensions='Buttons',rownames=FALSE,filter=c("top"),options=list(dom='Bfrtip',buttons=c('csv','copy','excel')))
    
    这将生成一个带有 CSV、复制和 Excel 按钮的表格。
    使用复制按钮并粘贴到 Excel 中的结果是:
    enter image description here
    用户有可以粘贴的数据,但缺少任何格式(并将文件中的标题放在数据表本身上方的两行?)
    有没有办法修改 DT 的代码?表的复制按钮以包含一些指定的格式,例如缺少的参数,它提供了将一些格式复制到剪贴板的选项?或者一种生成独立按钮的方法,我可以在后面存储一个 excel 格式的表格,以便用户可以以一种对 excel 友好的格式化形式复制我的表格?
    注意:我不想从 R 中写入 excel 文件。似乎有很多选项可用于格式化表格和使用 openxlsx 写入 Excel。和解决方案:Write from R into template in excel while preserving formatting ,但这并不能回答我的问题。
    编辑:似乎可以将格式添加到 Excel 按钮,此处提到:https://datatables.net/extensions/buttons/examples/html5/excelBorder.html
    这给了我希望,也许 .attr()格式规范可以以某种方式添加到 copy按钮。
    作为尝试测试我是否可以让这个中间步骤发挥作用的第一步,我尝试了:
    jscode<-"function ( xlsx ){var sheet = xlsx.xl.worksheets['sheet1.xml']; $('row c[r*=10]', sheet).attr( 's', '25' );   }"
    
    datatable(data1,class='cell-border',extensions='Buttons',rownames=FALSE,filter=c("top"),options=list(dom='Blfrtip',buttons=list(list(extend='excel',customize=jscode))))
    
    结果是一无所有的旋转按钮。
    当我尝试:
    library(jsonlite)
    datatable(data1,class='cell-border',extensions='Buttons',rownames=FALSE,filter=c("top"),options=list(dom='Blfrtip',buttons=list(list(extend='excel',customize=fromJSON(jscode)))))
    
    我收到一个错误:
    enter image description here
    由于这个问题的解决方案似乎依赖于一些 javascript(至少如果答案基于 datatable ,我添加了 javascript 标签。

    最佳答案

    复制并删除表标题时,此代码应为您提供整个表(尽管没有任何格式,也许有人可以扩展此答案):

    library(DT)
    DT::datatable(mtcars,
                  filter = 'top', 
                  class = 'cell-border stripe',
                  extensions = 'Buttons',
                  options = list(scrollY = 600,
                                 scrollX = TRUE,
                                 dom = 'lBfrtip',
                                 lengthMenu=  list(c(10, 25, 100, -1), 
                                                   c('10', '25', '100','All')),
                                 buttons = list(
                                   list(extend = "copy", text = "copy", 
                                        title= "",
                                        exportOptions = list(
                                        modifier = list(page = "all")
                                      )
                                   )
                                 ),
                                 scrollCollapse= TRUE,
                                 lengthChange = TRUE, 
                                 widthChange= TRUE,
                                 format = list(
                                   header = TRUE
                                 )))
    
    #If you don't want rownames then you can have:
    #DT::datatable(mtcars,
    #              filter = 'top', 
    #              class = 'cell-border stripe',
    #              extensions = 'Buttons',
    #              rownames = FALSE,
    #              extensions = 'Buttons',
    #              options = list(
    #              ......)))
    
    
    当您点击“复制”并将其粘贴到 Excel 中时,您应该会看到以下内容 -
    enter image description here
    可以在此处找到与 DT 相关的更多选项:https://datatables.net/reference/option/

    关于javascript - 如何将表格添加到我的 rmarkdown html 输出中,该表格将粘贴到带有格式的 Excel 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66784020/

    相关文章:

    r - 如何产生混淆矩阵并找到朴素贝叶斯分类器的误分类率?

    yaml - R Markdown YAML "Scanner error: mapping values..."

    javascript - SVG Elements 上的事件委托(delegate)

    r - 如何在R中重复减去数据矩阵的行

    javascript - scrollIntoView() 不适用于水平滚动(Selenium)

    r - 构造一个命名列表而不必键入每个对象的名称两次

    r - Bookdown 文档未正确呈现输出

    r - 观星者错误 "length of NULL cannot be changed"

    javascript - 如何让 Google 自定义搜索 (V2) 使用预加载的搜索字符串立即执行?

    javascript - 使用 vue-axios 在浏览器控制台上显示数据