我根据一个csv文件创建一个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')
答案 0 :(得分:0)
我正在基于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()
答案 1 :(得分:0)
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", "COLB"))
ft <- ft %>%
style(i= ~ 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="COLB", value = as_paragraph(as_chunk('100')),part = 'body')
ft
答案 2 :(得分:0)
另一个问题:是否有办法在flextable中获取单元格值。目前,我已经执行了此操作(现在我已经无法使用了):ft $ body $ dataset [10,5]。
谢谢
答案 3 :(得分:0)
我只是遇到了同样的问题,并且有一段时间恶搞谷歌搜索解决方案。 @ David-Gohel在这里确实有答案,但是我觉得有必要提供类似的解决方案并附加说明。
我的问题和操作流程是,我们希望使用不会显示的列中的数据来影响将要显示的列的格式。最初并不明显的概念是,您可以向具有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并更改格式的触发器):