如何将表格添加到我的 rmarkdown html 输出中,该表格将使用格式粘贴到 Excel 中?

Pak*_*ake 6 javascript r r-markdown

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

有没有办法产生:

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

使用这个非常简单的数据框:

data<-data.frame(Variable=c('Amount','Age','Happiness','Favorite Color'),
             Value=c(15,25,7,'Yellow'))
Run Code Online (Sandbox Code Playgroud)

我希望用户能够单击 html 文件中的按钮,以便当他们粘贴到 excel 或 word 中时,他们会看到:

在此处输入图片说明

或者

在此处输入图片说明

取决于指定的格式。

就目前而言,我可以制作一个带有单元格边框的表格kable

data%>%
  kable("html",align = 'clc')%>%
  kable_styling(full_width = F,position="left",bootstrap_options = 
  c("striped","bordered"))
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明 这个表格,在使用 rmarkdown 生成的 html 文件中,显示单元格边框,并且具有可接受的间距和清晰度(列的宽度足以显示完整的列标题,网格清楚地定义了单元格。

当我突出显示表格并将其粘贴到 Excel 中时,我得到:

在此处输入图片说明

一个不满意的结果。

生成一个表DT,我使用:

datatable(data,extensions='Buttons',rownames=FALSE,filter=c("top"),options=list(dom='Bfrtip',buttons=c('csv','copy','excel')))
Run Code Online (Sandbox Code Playgroud)

这将生成一个带有 CSV、复制和 Excel 按钮的表格。

使用复制按钮并粘贴到 Excel 的结果是:

在此处输入图片说明

用户有可以粘贴的数据,但没有任何格式(并将文件中的标题放在数据表本身上方两行?)

有没有办法修改DT表格的“复制”按钮的代码以包含一些指定的格式,例如缺少的参数,它提供了将一些格式复制到剪贴板的选项?或者一种生成独立按钮的方法,我可以在后面存储一个 excel 格式的表格,以便用户可以以一种 excel 友好的格式格式复制我的表格?

注意:我不想从 R 写入 excel 文件。 似乎有很多选项可以用于格式化表格和写入 Excelopenxlsx以及这里的解决方案:Write from R into template in excel while reserved formats,但这并没有回答我的问题。

编辑: 似乎可以将格式添加到 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))))
Run Code Online (Sandbox Code Playgroud)

结果是一个无所事事的旋转按钮。

当我尝试:

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)))))
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

在此处输入图片说明

由于这个问题的解决方案似乎依赖于一些 javascript(至少如果答案将基于datatable,我已经添加了 javascript 标签。

Mar*_*rez 1

图书馆kableExtra会帮助你。尝试这个:

library(kableExtra)
data %>%
  kbl() %>%
  kable_paper("hover", full_width = F)
Run Code Online (Sandbox Code Playgroud)

还有其他样式,请搜索R文档。该表如下所示:

在此输入图像描述

然后我复制:

在此输入图像描述

最后,粘贴到Excel中:

在此输入图像描述

有时您需要粘贴为“Unicode Text”或“Text”(可以使用特殊粘贴来实现)。 在此输入图像描述