用R创建xlsx工作表 - 字体颜色不起作用

问题描述 投票:4回答:2

我正在开展一个项目,我需要自动生成来自特定类型数据框架的数据电子表格。我已经阅读了有关如何执行此here的有用解释,并基于此解释,我使用R.Studio包(版本0.5.7)在xlsx(专业版1.1.383)中创建了一些代码。我的代码生成来自现有数据框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");

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

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

r xlsx
2个回答
3
投票

如果在控制台中键入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颜色规范(例如,“红色”,“紫色”,“#F372B6”)也在Font输出对象中正确编码,并且颜色在电子表格输出中按预期呈现。

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


0
投票

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

但是,正如eipi10所说,其他颜色与“#”编码一起使用。

© www.soinside.com 2019 - 2024. All rights reserved.