У меня просто была такая же проблема, и у меня был черт времени Поиск в Google. @ Дэвид-Гохель действительно имеет здесь ответ, но я чувствую необходимость предоставить аналогичное решение с дополнительными пояснениями.
Моя проблема и ОП заключаются в том, что мы хотели использовать данные из столбцов, которые не будут отображаться, чтобы повлиять на форматирование столбцов, которые будут отображаться. Концепция, которая изначально не была очевидной, заключается в том, что вы можете отправить фрейм данных на 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, а также для изменения форматирования):
![Example Flextable](https://i.stack.imgur.com/kIoxd.png)