【发布时间】:2023-01-29 20:57:37
【问题描述】:
我有多个 Excel 文件,每个文件都有几张纸。文件是通过 R 中的循环从数据帧自动创建的。每个 Excel 文件的每个工作表都应应用格式。根据 Excel 文档布局的公司风格,行的颜色应该互换。偶数行和奇数行应分别为白色和灰色。标题应该是绿色的,它的字母应该是白色的。当然,header 有自己的格式。为此,我尝试使用包 openxlsx 中的函数“conditionalFormatting”。不幸的是我只达到了部分结果。
我尝试应用此代码:
header_style <- createStyle(fontSize = 10, fontName = "SEGOE UI Semibold", fontColour = "#FFFFFF",
halign = "left", valign = "top", fgFill = "#85BC22", border = "LeftRight",
borderColour = "#FFFFFF", borderStyle = "thin", wrapText = TRUE)
style_even <- createStyle(fontSize = 10, fontName = "SEGOE UI", fontColour = "#000000",
halign = "left", valign = "bottom", fgFill = "#FFFFFF", border = "LeftRight",
borderColour = "#FFFFFF", borderStyle = "thin", wrapText = TRUE)
style_odd <- createStyle(fontSize = 10, fontName = "SEGOE UI", fontColour = "#000000",
halign = "left", valign = "bottom", fgFill = "#D9D9D9", border = "LeftRight",
borderColour = "#FFFFFF", borderStyle = "thin", wrapText = TRUE)
for (j in 1:number_of_sheets)
{
sheet_wb <- read.xlsx(wb, sheet = j, colNames = FALSE)
conditionalFormatting(wb, sheet = j, rows = 1:nrow(sheet_wb), cols = 1:ncol(sheet_wb),
rule = "EVEN(ROW($A1))=ROW($A1)", style = style_even)
conditionalFormatting(wb, sheet = j, rows = 1:nrow(sheet_wb), cols = 1:ncol(sheet_wb),
rule = "ODD(ROW($A1))=ROW($A1)", style = style_odd)
addStyle(wb, sheet = j, header_style, rows = 1, cols = 1:ncol(sheet_wb), gridExpand = TRUE)
rm(sheet_wb)
}
然而,偶数行和奇数行仍然是白色的。他们的字体仍然是 Calibri,大小为 11。标题中的字母仍然是黑色,而不是白色。而且,似乎偶数行和奇数行(单元格中不是偶数和奇数)的条件格式规则应该以另一种方式定义,但除了现在代码中的规则外,我没有找到任何东西。
【问题讨论】:
-
openxlsx 是否允许使用表格样式和单元格样式?表格样式可以包含交替行着色,而无需条件格式规则。
-
请提供足够的代码,以便其他人可以更好地理解或重现问题。
-
抛开循环不谈,你能让你的代码只在一张纸上工作吗?
-
尝试将 type = "expression" 添加到 conditionalFormatting 函数。