我正在开展一个项目,我需要自动生成来自特定类型数据框架的数据电子表格。我已经阅读了有关如何执行此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"
,这得到了相同的结果。
为什么我的标题和信息文本会以白色字体显示?我该如何解决?
如果在控制台中键入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%黑色,这个解决方法应该完成工作。
我遇到了同样的问题并使用color =“000000”而不是color =“#000000”解决了问题。
但是,正如eipi10所说,其他颜色与“#”编码一起使用。