我基于 csv 文件创建了一个 flextable,我在上面添加了一些样式,更改了一些单元格。然后我想在将它添加到文档之前删除这个 flextable 的特定列。有没有办法创建 flextable 的副本并指定 col_keys?
mydf <- GetData(....)
cols <- names(mydf)
myft <- flextable(mydf, col_keys = cols)
# Adding style to ft...
# ....
# Here I want to remove one column to the ft (and only here, not when first creating the ft)
# something as:
# ft <- CreateCopyOfFlextable(ft,cols[-which(cols=='COLB')])
#
my_doc <- read_docx()
my_doc <- my_doc %>% body_add_par("") %>%
body_add_flextable(value = ft)
print(my_doc, target = 'c:/temp/doc.docx')
Run Code Online (Sandbox Code Playgroud)
我只是遇到了同样的问题,并且有一段时间在谷歌上搜索解决方案。@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
Run Code Online (Sandbox Code Playgroud)
以下是上述代码产生的结果(例如,“changevalue”列是在 COLC 中有条件地插入 100 以及更改格式的触发器):
我正在基于 COLB 设计另一列的样式。这里有一个例子:
df <- data.frame(COLA=c('a','b','c'),COLB=c('','changevalue',''),COLC=c(10,12,13))
ft<-flextable(df)
ft <- ft %>% style(i=which(ft$body$dataset$COLB=='changevalue'),pr_t=fp_text(color="black", font.size=11, bold=TRUE, italic=FALSE, underline=FALSE, font.family="Times New Roman"),part="body")
ft<-compose(ft, i=2,j=3, value = as_paragraph(as_chunk('100')),part = 'body')
# now I want to remove the COLB columns as I don't need it anymore
# ???????
my_doc <- read_docx()
my_doc <- my_doc %>% body_add_par("") %>% body_add_flextable(value = ft)
print(my_doc, target = 'c:/temp/orliange_p/sample.docx') %>% invisible()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1255 次 |
| 最近记录: |