Как отформатировать всю строку в xlsx на основе символа ячейки в R

Я использую R для редактирования рабочего листа xlsx. Я хотел бы отформатировать лист с цветными строками на основе значений символов в определенном столбце, а затем сохранить книгу в форме xlsx. Я успешно загрузил книгу, используя xlsx в R. Я могу просмотреть символы в книге и изменить цвет фона этой конкретной ячейки в зависимости от условия, но у меня возникают проблемы с изменением цвета всей этой строки.

Мой вопрос: как я могу сделать всю строку сплошным цветом, а не только ячейку? До сих пор я следовал инструкциям и коду, расположенному здесь:

Цвет ячеек с определенным значения символов в r для экспорта в xlsx

Что вам нужно добавить к коду в приведенной выше ссылке, чтобы вся строка была того же цвета, что и конкретная целевая ячейка?

greenStyle <- createStyle(fontColour = "#000000", bgFill = "green")
yellowStyle <- createStyle(fontColour = "#000000", bgFill = "yellow")
conditionalFormatting(wb, "entire report", cols=1:12, rows=1:2000, rule="Finished", style = greenStyle, type = "contains")
conditionalFormatting(wb, "entire report", cols=1:12, rows=1:2000, rule="In Process", style = yellowStyle, type = "contains")
saveWorkbook(wb, file, overwrite=TRUE)

person Thomas Decker    schedule 03.07.2019    source источник


Ответы (1)


Этот вопрос возник некоторое время назад, я хотел это сделать, затем нашел ответ и хотел поделиться (кстати, я автор сообщения, упомянутого в вопросе :))

Итак, чтобы покрасить всю строку, я сделал воспроизводимый пример:

Воспроизводимый пример:

dfX <- data.frame('a' = c(1:4),
       'b' = c(1:2,2:1),
       'c' = LETTERS[1:4],
       'e' = LETTERS[1:2][2:1],
       'f' = c('Finished', 'In Process', 'In Process', 'In Process'))

library(openxlsx)
wb <- createWorkbook()
addWorksheet(wb, "Sheet", gridLines = TRUE)
writeData(wb, "Sheet", dfX)

greenRows = data.frame(which(dfX == "Finished", arr.ind=TRUE))
yellowRows = data.frame(which(dfX == "In Process", arr.ind=TRUE))
## Here I create data frames where it states which rows and columns
## have 'Finished' and which have 'In Process'. From here I want to keep only the
## rows from these data frames.

# Create a heading style
Heading <- createStyle(textDecoration = "bold", border = "Bottom")

# Row styles
greenStyle <- createStyle(fontColour = "#000000", fgFill = "green")
yellowStyle <- createStyle(fontColour = "#000000", fgFill = "yellow")

Важное примечание: я использую "fgFill" вместо "bgFill", потому что для этого мы будем использовать addStyle (а не conditionalFormatting), а в документации указано, что bgFill только для conditionalFormatting

# Apply header style:
addStyle(wb, "Sheet", cols = 1:ncol(dfX), rows = 1, style = Heading)

# Apply greenStyle:
addStyle(wb, "Sheet", cols = 1:ncol(dfX), rows = greenRows[,1]+1,
         style = greenStyle, gridExpand = TRUE)

# Apply yellowStyle:
addStyle(wb, "Sheet", cols = 1:ncol(dfX), rows = yellowRows[,1]+1,
         style = yellowStyle, gridExpand = TRUE)

saveWorkbook(wb, file, overwrite=TRUE)

Обратите внимание, что в "rows = " я ввожу greenRows[,1]+1, что означает только первый столбец данных greenRows data.frame плюс 1 (первая строка будет заголовком, поэтому пропустите этот)

Также обратите внимание, что в последней строке, в части file, вы должны указать каталог, в котором будет сохранен файл с окончанием .xlsx, например:

saveWorkbook(wb, file = "C:/Documents/newfile.xlsx", overwrite=TRUE)

Этот пост, хотя и не тот же самый вопрос, мне помог.

person Sahira Mena    schedule 02.05.2020
comment
Спасибо, что поделились примером! Сейчас пытаюсь реализовать. Я натыкаюсь на блокпост здесь: Ошибка в стиле %in% class(style): объект 'duppedStyle' не найден. Есть мысли? - person Thomas Decker; 16.05.2020
comment
глупый я, я скопировал неправильный один шаг, там я исправил это в ответе. Проблема была в части addStyle, где написано style. Я должен указать ранее определенные имена стилей (greenStyle и yellowStyle соответственно) - person Sahira Mena; 17.05.2020