在 R 中创建 xlsx sheet - 字体颜色不起作用

Creating an xlsx sheet in R - font colour not working

我正在开展一个项目,我需要自动生成来自特定类型 data-frame 的数据电子表格。我已经阅读了有关如何执行此操作的有用解释 here,并基于此解释,我使用 xlsx 包在 R.Studio(专业版 1.1.383)中创建了一些代码( 0.5.7 版)。我的代码从现有数据框 TABLE 生成数据电子表格。这是我正在使用的代码,带有用于创建可重现示例的模拟数据框:

#In this code we create a mock data frame called TABLE
#In practice we have a larger data frame with data that is not reproduced here

TABLE <- data.frame(Var1 = c(1, 6, 3, 9, 10, 4, 3, 5, 2, 2), 
                    Var2 = c(18.1, 14.2, 12.0, 21.3, 33.4, 16.0, 15.4, 8.6, 6.7, 12.9),
                    Var3 = c(0, 1, 1, 0, 1, 1, 0, 0, 0, 0));

#Create workbook, sheet, columns and styles
WB             <- createWorkbook(type = "xlsx");
SHEET          <- createSheet(WB, sheetName = "My Data");

rows           <- createRow(SHEET, rowIndex = 1:5);
cells          <- createCell(rows, colIndex = 1:(1+ncol(TABLE)));

STYLE_TITLE    <- CellStyle(WB) + 
                  Font(WB, name = "Calibri", heightInPoints = 16, 
                       color = "black", isBold = TRUE, isItalic = FALSE);

#Add data from data frame TABLE
addDataFrame(TABLE, SHEET, startRow = 4L, startColumn = 2L, 
             colnamesStyle = STYLE_COLNAMES, row.names = FALSE);

#Add title
setCellValue(cells[[2, 2]], "This is my spreadsheet title"); 
setCellStyle(cells[[2, 2]], STYLE_TITLE);

#Save workbook
saveWorkbook(WB, "My Pretty Workbook.xlsx");

此代码成功生成了我想要的电子表格,一切看起来都是我想要的,除了 标题以白色字体显示,这意味着它们看不到在电子表格的白色背景上。在我看来,这与我指定 Fontcolor = "black" 的代码部分相反。我也尝试过使用 color = "#000000",结果相同。

为什么我的标题和信息文本显示为白色字体?我该如何解决这个问题?

如果您在控制台中键入 STYLE_TITLE,您可以在输出中看到(在 $font$ref 下查看),颜色被设置为 FFFFFF,即白色。下面是我在控制台中看到的内容(我只显示了输出的相关部分)。请注意最后一行的 FFFFFF

STYLE_TITLE    <- STYLE_TITLE    <- CellStyle(WB) + 
  Font(WB, name = "Calibri", heightInPoints = 16, 
       color = "black", isBold = TRUE, isItalic = FALSE)

STYLE_TITLE
$font
$ref
[1] "Java-Object{<xml-fragment xmlns:main=\"http://schemas.openxmlformats.org
/spreadsheetml/2006/main\">\n  <main:name val=\"Calibri\"/>\n  <main:sz val=\"16.0
\"/>\n  <main:color rgb=\"FFFFFF\"/>\n  <main:b val=\"true\"/>\n</xml-fragment>}"

我不知道为什么会这样,也不知道如何使用 Font 函数将 "black" 或“#000000” 转换为 000000 的正确颜色代码。但是,我确实(奇怪地)发现其他颜色编码可以正常工作。例如,您可以使用颜色 "#010101",它几乎是黑色的:

STYLE_TITLE    <- STYLE_TITLE    <- CellStyle(WB) + 
  Font(WB, name = "Calibri", heightInPoints = 16, 
       color = "#010101", isBold = TRUE, isItalic = FALSE)

STYLE_TITLE
$font
$ref
[1] "Java-Object{<xml-fragment xmlns:main=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\">\n
<main:name val=\"Calibri\"/>\n  <main:sz val=\"16.0\"/>\n  <main:color
rgb=\"010101\"/>\n  <main:b val=\"true\"/>\n</xml-fragment>}"

这个和其他颜色名称和 rgb 颜色规范(例如,"red"、"purple"、“#F372B6”)也在 Font 输出对象中正确编码,并且颜色在电子表格输出中按预期呈现。

我知道你想要 100% 的黑色,但如果你能接受 99.6% 的黑色,这个解决方法应该可以完成工作。

我遇到了同样的问题并使用 color = "000000" 而不是 color = "#000000" 解决了问题。

但是,正如eipi10所说,其他颜色适用于“#”编码。