【问题标题】:Font Coloring Using xlsx Package in R在 R 中使用 xlsx 包进行字体着色
【发布时间】:2014-11-20 02:01:56
【问题描述】:

我正在编写一个 R 函数来保存预先格式化的数据帧。部分格式模板要求更改列标题字体颜色。单元格样式返回正确的对齐方式和粗体,但文本仍然是黑色的。

下面是一个裸版本来演示我的字体着色问题(只需将 file_path 变量更改为存在的位置)。

library(xlsx)
file_path <- "C:/Users/.../Desktop/tst.xlsx"
wb <- createWorkbook()

headerStyle <- CellStyle(wb,
                         font = Font(wb, isBold=TRUE, color = "#ffffff"),
                         fill = Fill(foregroundColor = "#2db6e8",
                                     pattern = "SOLID_FOREGROUND"),
                         alignment = Alignment(wrapText = TRUE,
                                               horizontal = "ALIGN_CENTER",
                                               vertical = "VERTICAL_CENTER")
)

x <- mtcars
sheet <- createSheet(wb, "test")

cellBlock <- CellBlock(sheet,
                       startRow = 1,
                       startCol = 1,
                       noRows = nrow(x) + 1,
                       noColumns = ncol(x) + 1,
                       create = TRUE)

CB.setRowData(cellBlock = cellBlock,
              x = colnames(x),
              rowIndex = 1,
              colOffset = 1,
              rowStyle = headerStyle +
                Border(pen = "BORDER_MEDIUM", color = "black",
                       position = "BOTTOM"))

saveWorkbook(wb, file_path)

【问题讨论】:

  • 当我这样做时(在带有 Excel 2011 的 Mac 上)我得到一个标题行,该行颜色为中蓝色,下边框较厚。

标签: r xlsx


【解决方案1】:

我能够使用 INDEXED_COLORS_ 常量中的颜色索引来获取白色文本,该常量是白色的 9。对于您的示例代码,它将显示为:

headerStyle <- CellStyle(wb,
          font = Font(wb, isBold=TRUE, color = "9"),
          fill = Fill(foregroundColor = "#2db6e8",
          pattern = "SOLID_FOREGROUND"),
          alignment = Alignment(wrapText = TRUE,
                            horizontal = "ALIGN_CENTER",
                            vertical = "VERTICAL_CENTER")
)

【讨论】:

    【解决方案2】:

    它似乎与白色文本唯一相关。尝试使用不同的颜色:

    headerStyle <- CellStyle(wb,
                  font = Font(wb, isBold=TRUE, color = "grey"),
                  fill = Fill(foregroundColor = "#2db6e8",
                  pattern = "SOLID_FOREGROUND"),
                  alignment = Alignment(wrapText = TRUE,
                                    horizontal = "ALIGN_CENTER",
                                    vertical = "VERTICAL_CENTER")
    

    )

    它适用于橙色、灰色、蓝色,但不适用于白色。如果背景是默认的白色,这可能是为了防止文本不可见,但我不能肯定地说。也许包创建者可以发表评论。

    【讨论】:

    • 你说得对,我尝试的任何其他颜色都可以。我现在将使用超浅灰色并向包创建者提交问题。谢谢!
    【解决方案3】:

    xlsx 包使用的常量定义在这些组中:

    HALIGN_STYLES_
    
    VALIGN_STYLES_
    
    BORDER_STYLES_
    
    FILL_STYLES_
    
    CELL_STYLES_
    
    INDEXED_COLORS_
    

    所以,只需在控制台中为INDEX_COLORS_ 显示它们即可

      BLACK                 WHITE                   RED          BRIGHT_GREEN                  BLUE                YELLOW 
                        8                     9                    10                    11                    12                    13 
                     PINK             TURQUOISE              DARK_RED                 GREEN             DARK_BLUE           DARK_YELLOW 
                       14                    15                    16                    17                    18                    19 
                   VIOLET                  TEAL       GREY_25_PERCENT       GREY_50_PERCENT       CORNFLOWER_BLUE                MAROON 
                       20                    21                    22                    23                    24                    25 
            LEMON_CHIFFON                ORCHID                 CORAL            ROYAL_BLUE LIGHT_CORNFLOWER_BLUE              SKY_BLUE 
                       26                    28                    29                    30                    31                    40 
          LIGHT_TURQUOISE           LIGHT_GREEN          LIGHT_YELLOW             PALE_BLUE                  ROSE              LAVENDER 
                       41                    42                    43                    44                    45                    46 
                      TAN            LIGHT_BLUE                  AQUA                  LIME                  GOLD          LIGHT_ORANGE 
                       47                    48                    49                    50                    51                    52 
                   ORANGE             BLUE_GREY       GREY_40_PERCENT             DARK_TEAL             SEA_GREEN            DARK_GREEN 
                       53                    54                    55                    56                    57                    58 
              OLIVE_GREEN                 BROWN                  PLUM                INDIGO       GREY_80_PERCENT             AUTOMATIC 
                       59                    60                    61                    62                    63                    64 
    

    您可以使用数字或别名样式:

      cs2 <- CellStyle(wb) +
        Font(
          wb,
          heightInPoints = 12,
          isBold = F,
          isItalic = F,
          name = "Arial",
          color="ORANGE"
        )
    
     cs2 <- CellStyle(wb) +
        Font(
          wb,
          heightInPoints = 12,
          isBold = F,
          isItalic = F,
          name = "Arial",
          color=59
        )
    

    【讨论】:

      猜你喜欢
      • 2018-06-25
      • 2015-06-21
      • 1970-01-01
      • 1970-01-01
      • 2015-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多