openxlsx - заполнить строку строки на основе текста в другом столбце - PullRequest
0 голосов
/ 10 апреля 2019

Я пытаюсь заполнить строку в книге Excel с openxlsx на основе текста в столбце из этой строки. Например, если ячейка C3 содержит A, выделите строку 3.

В идеале это не будет conditionalFormatting. Я хотел бы, чтобы это был фактический цвет строки, основанный на тексте в ячейке, но conditionalFormatting кажется единственным вариантом. Если я смогу сделать его реальным цветом, пожалуйста, дайте мне знать.

Приведенный ниже код показывает, что вы можете выделить строку на основе value ячейки в этой строке, но не в том случае, если вы пытаетесь использовать текст. Кроме того, если для type установлено значение contains, значит, оно не принимает никаких стилей.

wb <- createWorkbook()

addWorksheet(wb, "Dependent on")
addWorksheet(wb, "containsText")


negStyle <- createStyle(fontColour = "#9C0006", bgFill = "#FFC7CE")
posStyle <- createStyle(fontColour = "#006100", bgFill = "#C6EFCE")


## highlight row based on value in column 2
writeData(wb, "Dependent on", data.frame(x = 1:10, y = runif(10)), startRow = 15)
conditionalFormatting(wb, "Dependent on", cols=1:2, rows=16:25, rule="$B16<0.5", style = negStyle)
conditionalFormatting(wb, "Dependent on", cols=1:2, rows=16:25, rule="$B16>=0.5", style = posStyle)


## cells containing text
fn <- function(x) paste(sample(LETTERS, 10), collapse = "-")
writeData(wb, "containsText", data.frame(letters = sapply(1:10, fn), numbers = 1:10))
conditionalFormatting(wb, "containsText", cols = 1:2, rows = 1:10, type = "contains", rule = "A")


openXL(wb) ## opens a temp version

1 Ответ

0 голосов
/ 24 мая 2019

Вы ожидаете этого результата?

library(openxlsx)


fn <- function(x) paste(sample(LETTERS, 10), collapse = "-")
a <- data.frame(letters = sapply(1:10, fn), numbers = 1:10)

wb <- createWorkbook()

addWorksheet(wb, "containsText")
writeData(wb = wb, sheet = "containsText", x = a)
color <- createStyle(fgFill = "#00CCFF") #BLUE
addStyle(wb = wb, sheet = "containsText", style = color, rows = which(grepl(a$letters, pattern = "A")) + 1, cols = 1)
saveWorkbook(wb = wb, file = "test_color.xlsx", overwrite = TRUE)
...