创建柔性表后删除柔性表列

时间:2019-05-15 11:18:19

标签: flextable

我根据一个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')

4 个答案:

答案 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并更改格式的触发器):

Example Flextable