У меня была такая же проблема, и я чертовски долго искал решение в Google. @ David-Gohel действительно знает ответ здесь, но я чувствую необходимость предоставить аналогичное решение с дополнительными пояснениями.
Моя проблема и OP в том, что мы хотели использовать данные из столбцов, которые не будут отображаться, чтобы повлиять на форматирование столбцов, которые будут отображаться. Идея, которая изначально не была очевидной, заключается в том, что вы можете отправить фрейм данных в flextable
с большим количеством столбцов, чем вы собираетесь отображать (вместо того, чтобы отображать все и удалять их, которые вы использовали). Затем, используя аргумент col_keys
, вы можете выбрать только те столбцы, которые хотите отобразить, оставив при этом оставшиеся для дополнительной обработки (например, для использования compose()
, paragraph()
или add_chunk()
).
Если я правильно понимаю, COLB
должен быть флагом, указывающим, что определенные строки COLC
должны быть изменены. Если да, то мое решение выглядит так:
library(flextable)
library(magrittr)
library(officer)
df <- data.frame(COLA=c('a', 'b', 'c'),
COLB=c('', 'changevalue', ''),
COLC=c(10, 12, 13))
ft <- flextable(df, col_keys = c("COLA", "COLC")) %>% # Retain but don't display COLB
compose(i = ~ COLB =='changevalue', # Use COLB for conditional modifications
j = "COLC",
value = as_paragraph(as_chunk('100')),
part = 'body') %>%
style(i = ~ COLB =='changevalue', # Use COLB for conditional formatting on COLC
j = "COLC",
pr_t = fp_text(color = "black",
font.size = 11,
bold = TRUE,
italic = FALSE,
underline = FALSE,
font.family = "Times New Roman"),
part = "body")
ft
И вот что производит приведенный выше код (например, столбец «changevalue» является триггером для условной вставки 100 в COLC, а также для изменения форматирования):
person
D. Woods
schedule
11.07.2019
col_keys
? - person David Gohel   schedule 15.05.2019