使用rmarkdown

时间:2018-06-13 13:58:51

标签: r flextable

我正在使用RMarkdown和Shiny生成一个报告模板(单词格式),其中包含许多表格,其中包含单元格内容中的复选框。我使用了" flextable"用于创建表的包。但是,我无法在表格中插入复选框。关于如何做到这一点的任何想法?例如,我应该如何制作"复选框"实际上在决赛桌中显示一个复选框?

x <- structure(list(col1 = c("test1", rep("1", 4), checkbox), col2 = c("test2", rep("", 5)), col3 = c("test3", rep("", 5)), col4 = c("test4", rep("", 5))), .Names = c("col1", "col2", "col3", "col4"), class = c("data.frame"), row.names = c(NA, 6L))

MyFTable  <- flextable(x, col_keys = c("col1", "col2", "col3", "col4"))

我试图设置

checkbox <- '<label><input type = "checkbox"> </label>'

但它没有用。

为了更清晰,请参阅以下图片。基本上,我想要这样的东西,模板的用户可以检查某个项目前面的复选框。例如,有两个项目&#34;足够&#34;和&#34;不足&#34;在&#34;配方&#34;右侧的细胞内容中。如果报告的用户决定&#34;充足&#34;是正确的,他只需点击&#34;充足&#34;前面的复选框。 An image of the desired format of the checkbox

2 个答案:

答案 0 :(得分:0)

一种可行的解决方案是使用Wingdings字体显示符号(当字体为Wingdings时,o为正方形)

library(officer)
library(magrittr)
library(flextable)

doc <- read_docx()

d <- data.frame(checkbox = "o", stringsAsFactors = FALSE) %>% 
  flextable() %>% 
  font(fontname = "Wingdings")

doc <- body_add_flextable(doc, d)

print(doc, "test.docx")

似乎在Word中存在真正的复选框,但只能在某些Word版本中使用(不是我的)!

答案 1 :(得分:0)

旧问题,但是由于我遇到类似问题,我将分享解决方案。诀窍是使用官库中的slip_in_xml函数。

library(officer)
library(magrittr)

my_doc <- read_docx()

my_doc <-  my_doc %>% 
  body_add_par('Heading 1', style = "heading 1") %>% 
  body_add_par(" ", style = "Normal") %>% # blank paragraph
  slip_in_xml(paste0('<w:sdt>
                       <w:sdtPr>
                       <w:id w:val="-990252438"/>
                       <w14:checkbox>
                       <w14:checked w14:val="0"/>
                       <w14:checkedState w14:val="2612" w14:font="MS Gothic"/>
                       <w14:uncheckedState w14:val="2610" w14:font="MS Gothic"/>
                       </w14:checkbox>
                       </w:sdtPr>
                       <w:sdtContent>
                       <w:r>
                       <w:rPr>
                       <w:rFonts w:ascii="MS Gothic" w:eastAsia="MS Gothic" w:hAnsi="MS Gothic" w:hint="eastAsia"/>
                       </w:rPr>
                       <w:t>☐</w:t>
                       </w:r>
                       </w:sdtContent>
                       </w:sdt>'), pos = 'after') %>%
  slip_in_text("pass", style = "strong") %>%
  slip_in_xml(paste0('<w:sdt>
                       <w:sdtPr>
                       <w:id w:val="-990252438"/>
                       <w14:checkbox>
                       <w14:checked w14:val="0"/>
                       <w14:checkedState w14:val="2612" w14:font="MS Gothic"/>
                       <w14:uncheckedState w14:val="2610" w14:font="MS Gothic"/>
                       </w14:checkbox>
                       </w:sdtPr>
                       <w:sdtContent>
                       <w:r>
                       <w:rPr>
                       <w:rFonts w:ascii="MS Gothic" w:eastAsia="MS Gothic" w:hAnsi="MS Gothic" w:hint="eastAsia"/>
                       </w:rPr>
                       <w:t>☐</w:t>
                       </w:r>
                       </w:sdtContent>
                       </w:sdt>'), pos = 'after') %>%
  slip_in_text("fail", style = "strong") %>%
  body_add_par(" ", style = "Normal") %>% # blank paragraph
  slip_in_text("comment", style = "strong")

print(my_doc, target = "MVP.docx")

要获取xml代码,您只需创建一个word文件,将其解压缩并提取所需的xml。两个对我有帮助的链接:An Informal Introduction to DOCXdocxtemplater: Can we check-uncheck checkboxes from word document template. #270