【发布时间】:2021-03-24 15:14:06
【问题描述】:
我想在 rmarkdown 文件中创建按钮(或可选择的表格),允许用户复制表格并将其粘贴到带有一些预定义格式的 word 或 excel 中。
有没有办法制作:
- 保留表格格式的复制功能,尤其是单元格的边框
- 捕获整个表的复制函数
使用这个非常简单的数据框:
data<-data.frame(Variable=c('Amount','Age','Happiness','Favorite Color'),
Value=c(15,25,7,'Yellow'))
我希望用户能够单击 html 文件中的按钮,这样当他们粘贴到 excel 或 word 中时,他们会看到:
或
取决于指定的格式。
就目前而言,我可以制作一个带有kable 单元格边框的表格,
data%>%
kable("html",align = 'clc')%>%
kable_styling(full_width = F,position="left",bootstrap_options =
c("striped","bordered"))
此表在使用 rmarkdown 生成的 html 文件中显示单元格边框,并具有可接受的间距和清晰度(列足够宽以显示完整的列标题,并且网格清楚地定义了单元格。
当我突出显示表格并将其粘贴到 Excel 中时,我得到:
一个不满意的结果。
用DT生成一个表,我使用:
datatable(data,extensions='Buttons',rownames=FALSE,filter=c("top"),options=list(dom='Bfrtip',buttons=c('csv','copy','excel')))
这会生成一个带有 CSV、复制和 Excel 按钮的表格。
使用复制按钮粘贴到 Excel 中的结果是:
用户有可以粘贴的数据,但缺少任何格式(并将文件中的标题放在数据表本身的上方两行?)
有没有办法修改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)))))
我收到一个错误:
由于这个问题的解决方案似乎依赖于一些javascript(至少如果答案基于datatable,我已经添加了javascript标签。
【问题讨论】:
-
似乎可以对
datatable进行一些自定义,但我不知道如何将其应用于我的 r 代码,或者这是否有助于开发一种应用所需格式的方法从datatable复制按钮:datatables.net/extensions/buttons/examples/html5/… -
正如我之前在answer 的评论中所说,复制不会保留任何格式。这些是与您的问题相关的一些问题:github.com/rstudio/DT/issues/449github.com/rstudio/DT/issues/445 这些问题被发布了“不会修复”标签,因为复制仅用于保留文本。它只会使用原始数据而不是 HTML 节点。复制后,您可能不得不依赖手动工作。对不起。
-
很好的发现。我想知道是否有一个创造性的解决方案,我们可以使用其中一个以 excel 为重点的 R 包和一些通用的 htmlwidget 作为按钮,该按钮可以将该表复制到剪贴板。在这里,cran.r-project.org/web/packages/basictabler/vignettes/… 等其他地方,我发现 Excel 格式化是在 R 中完成的,但在制作一个按钮的途径上没有运气,该按钮只会将格式化的表格复制到剪贴板,而不是读取/写入 excel 文件。
-
我看到了这个问题,它向我介绍了 BIFF 格式:stackoverflow.com/questions/6299824/…。也许这会有所帮助
标签: javascript r r-markdown