Вставьте флажок в содержимое ячейки гибкого объекта для слова с rmarkdown

Я использую 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>'

но это не сработало.

Для большей ясности смотрите следующие рисунки. По сути, я хочу что-то вроде этого, и пользователи шаблона могут установить флажок перед определенным элементом. Например, есть два элемента "Адекватный" и "Недостаточный" в содержимом ячейки с правой стороны "Формулировка". Если пользователь отчета решает, что "Адекватный" является правильным, он может просто установить флажок перед "Адекватный". Изображение нужного формата флажка

1 ответ

Старый вопрос, но так как у меня была похожая проблема, я поделюсь решением. Хитрость заключается в том, чтобы использовать функцию 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, вы можете просто создать файл слова, разархивировать его и извлечь необходимый XML. Мне помогли две ссылки: Неформальное введение в DOCX и docxtemplater: Можем ли мы установить или снять флажки в шаблоне документа Word. # 270

Одним из возможных решений является использование шрифта Wingdings для отображения символов (o является квадратом, если шрифтом является Wingdings)

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 (не моей)!

Другие вопросы по тегам