Вставьте флажок в содержимое ячейки гибкого объекта для слова с 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 (не моей)!