代码之家  ›  专栏  ›  技术社区  ›  Scott

修改flextable单元格部分的格式

  •  3
  • Scott  · 技术社区  · 8 年前


    e、 g.,布里尔( 菱形斜视

    display() 作用我的例子(有点明显)修改了整个单元格。我希望 pattern 参数可以用修改 {{moustaches}}

    library(flextable)
    library(officer)
    library(dplyr)
    
    data <- structure(list(Description = c("Brill (<em>Scophthalmus rhombus</em>) in subdivisions 22-32 (Baltic Sea)", 
                                           "Cod (<em>Gadus morhua</em>) in subdivisions 22-24, western Baltic stock (western Baltic Sea)", 
                                           "Cod (<em>Gadus morhua</em>) in subdivisions 25-32, eastern Baltic stock (eastern Baltic Sea)", 
                                           "Dab (<em>Limanda limanda</em>) in subdivisions 22-32 (Baltic Sea)", 
                                           "Flounder (<em>Platichthys flesus</em>) in subdivisions 22 and 23 (Belt Seas and the Sound)", 
                                           "Flounder (<em>Platichthys flesus</em>) in subdivisions 24 and 25 (west of Bornholm and southwestern central Baltic)"),
                           SpeciesScientificName = c("Scophthalmus rhombus", "Gadus morhua", "Gadus morhua", "Limanda limanda", "Platichthys flesus", "Platichthys flesus")),
                      .Names = c("Description", "SpeciesScientificName"), 
                      row.names = c(NA, 6L), class = "data.frame")
    
    data %>% 
      mutate(Description = gsub("<em>.*?</em>", "%s", Description)) %>%
      flextable() %>% 
      display(col_key = "Description", pattern = "{{sp_italics}}",
              formatters = list(sp_italics ~ sprintf(Description, SpeciesScientificName)),
              fprops = list(sp_italics = fp_text(italic = TRUE)))
    
    2 回复  |  直到 8 年前
        1
  •  6
  •   David Gohel    8 年前

    显示功能定义显示值。它不允许仅格式化单元格中文本的一部分,它定义了段落内容及其格式。我会从一个 data.frame。

    data <- structure(list(id = c("Brill", "Cod", "Cod", "Dab", "Flounder", 
    "Flounder"), SpeciesScientificName = c("Scophthalmus rhombus", 
    "Gadus morhua", "Gadus morhua", "Limanda limanda", "Platichthys flesus", 
    "Platichthys flesus"), subdivision = c("22-32", "22-24, western Baltic stock", 
    "25-32, eastern Baltic stock", "22-32", "22 and 23", "24 and 25"
    ), location = c("Baltic Sea", "western Baltic Sea", "eastern Baltic Sea", 
    "Baltic Sea", "Belt Seas and the Sound", "west of Bornholm and southwestern central Baltic"
    )), class = "data.frame", .Names = c("id", "SpeciesScientificName",  "subdivision", "location"), 
    row.names = c(NA, -6L))
    
    > data
            id SpeciesScientificName                 subdivision
    1    Brill  Scophthalmus rhombus                       22-32
    2      Cod          Gadus morhua 22-24, western Baltic stock
    3      Cod          Gadus morhua 25-32, eastern Baltic stock
    4      Dab       Limanda limanda                       22-32
    5 Flounder    Platichthys flesus                   22 and 23
    6 Flounder    Platichthys flesus                   24 and 25
                                              location
    1                                       Baltic Sea
    2                               western Baltic Sea
    3                               eastern Baltic Sea
    4                                       Baltic Sea
    5                          Belt Seas and the Sound
    6 west of Bornholm and southwestern central Baltic
    

    您的示例是在一个段落中连接4个信息,即参数 formatters 将需要4个参数。。。

    ft <- data %>% 
      flextable(col_keys = c("dummy_col", "SpeciesScientificName")) %>% 
      display(col_key = "dummy_col", pattern = "{{id_}} ({{sciname_}}) in {{subdivision_}} ({{location_}})",
              formatters = list(id_ ~ id, sciname_ ~ SpeciesScientificName, subdivision_ ~ subdivision, location_ ~ location ),
              fprops = list(sciname_ = fp_text(italic = TRUE), location_ = fp_text(color="red") )) %>% 
      set_header_labels(dummy_col="whatever") %>% 
      theme_booktabs() %>% autofit()
    
    read_docx() %>% body_add_flextable(ft) %>% print("test.docx")
    

    enter image description here

        2
  •  3
  •   Benbob    4 年前

    ftExtra colformat_md()

    https://ardata-fr.github.io/flextable-book/extensions.html#ftextra

    library(ftExtra)
    data.frame(x = c("**bold**", "*italic*"),
               y = c("^superscript^", "~subscript~"),
               z = c("***^ft^~Extra~** is*", "*Cool*")) %>% 
    flextable() %>% 
    colformat_md()