Мне нужно будет выполнить цветовое условное форматирование для 1 конкретного столбца, отформатировать его в процентах и экспортировать файл как .xlsx. Обратите внимание, что у меня есть 5 фреймов данных, с которыми я буду запускать этот код правила, и компилировать их в 1 рабочую книгу на разных листах. Я застрял в той части, где я не могу установить условное правило, если я отформатировал в нем процент. И наоборот, если я сначала использую условное форматирование, я не уверен, как мне отформатировать процент для этого столбца. Пожалуйста, обратитесь к моему коду ниже.
## Dataframe
cost_table <- read.table(text = "FRUIT COST SUPPLY_RATE
1 APPLE 15 0.026377
2 ORANGE 14 0.01122
3 KIWI 13 0.004122
5 BANANA 11 0.017452
6 AVOCADO 10 0.008324 " , header = TRUE)
## This is the line where I label the %. However if I do that, conditional formatting will not recognize it in the rule
cost_table$SUPPLY_RATE <- label_percent(accuracy = 0.01)(cost_table$SUPPLY_RATE)
## Creating workbook and sheet
Fruits_Table <- createWorkbook()
addWorksheet(Fruits_Table,"List 1")
writeData(Fruits_Table,"List 1",cost_table)
## Style color for conditional formatting
posStyle <- createStyle(fontColour = "#006100", bgFill = "#C6EFCE")
negStyle <- createStyle(fontColour = "#9C0006", bgFill = "#FFC7CE")
## If Supply rate is above 1.5%, it will be green, if it's equivalent or below, it will be red
conditionalFormatting(Fruits_Table, "List 1",
cols = 3,
rows = 2:6, rule = "C2> 0.015", style = posStyle
)
conditionalFormatting(Fruits_Table, "List 1",
cols = 3,
rows = 2:6, rule = "C2<= 0.015", style = negStyle
)
Вывод должен быть таким, как показано ниже.
Относительно пограничной информации
Я смотрю на применение внешней границы для c2: c6.
Чтобы прояснить мою цель, окончательный вывод будет показан ниже. У меня есть другие коды для форматирования границ заголовков и столбцов A:B. Из-за процентного стиля это повлияло на мою границу.
Вам не нужно использовать label_percent
из пакета scales
.
Вы можете применить процентный формат вместе с правилами цвета к книге, используя функции style
, а затем addStyle
. Еще одна вещь, которую я нашел в задокументированных примерах conditionalFormatting
, что вам не нужно указывать имя столбца (например, C
) в аргументе rule
, если ваше правило применяется только к одному столбцу без отношения к значениям в другом столбце.
Вот код, который я использовал:
Fruits_Table <- createWorkbook()
addWorksheet(Fruits_Table,"List 1")
writeData(Fruits_Table,"List 1",cost_table)
conditionalFormatting(Fruits_Table, "List 1",
cols = 3,
rows = 2:6, rule = "> 0.015", style = posStyle)
conditionalFormatting(Fruits_Table, "List 1",
cols = 3,
rows = 2:6, rule = "<= 0.015",
style = negStyle)
percent_style <- createStyle(numFmt = "PERCENTAGE")
addStyle(Fruits_Table,"List 1", style = ,percent_style, rows = 2:6, cols = 3)
Я попробовал этот код, и он работает.
saveWorkbook(Fruits_Table, "my_fruits_table.xlsx", )
Обновлено для добавления пограничной информации
Если вы хотите создать границу вместе с процентным форматом, вы можете использовать border
и borderStyle
следующим образом:
percent_border_style<- createStyle(numFmt = "PERCENTAGE",
border = "TopBottomLeftRight",
borderStyle = "medium" )
addStyle(Fruits_Table,"List 1",
style = ,percent_border_style,
rows = 2:6, cols = 3)
saveWorkbook(Fruits_Table, "borderline_fruits_table.xlsx", )
Вот пограничный результат
Если вы хотите настроить разные стили для разных ячеек, как вы объяснили в своем комментарии, вам нужно createStyle
для определенного стиля, а затем вы используете addStyle
, чтобы применить этот конкретный стиль к определенной ячейке. Итак, вам нужно указать строку и столбец для каждого стиля. Чтобы сохранить стиль процентного формата, вам также нужно сохранить numFmt
для каждого addStyle
.
Вот пример кода для применения внешних границ к целевому столбцу. Код настраивает границы для трех групп ячеек:
top_side_line <- createStyle(numFmt = "PERCENTAGE",
border = "TopLeftRight",
borderStyle = "medium")
side_line <- createStyle(numFmt = "PERCENTAGE",
border = "LeftRight",
borderStyle = "medium")
bottom_side_line <- createStyle(numFmt = "PERCENTAGE",
border = "BottomLeftRight",
borderStyle = "medium")
addStyle(Fruits_Table,"List 1",
style = top_side_line, rows = 2, cols = 3)
addStyle(Fruits_Table,"List 1",
style = side_line, rows = 3:5, cols = 3)
addStyle(Fruits_Table,"List 1",
style = bottom_side_line, rows = 6, cols = 3)
saveWorkbook(Fruits_Table, "newline_fruits_table.xlsx")
Вот результат:
Пожалуйста, проверьте мой обновленный ответ.
Более подробная информация доступна в ?openxlsx::createStyle
Привет Роман. Да, я пытался применить это условие, но граница применяется ко всем ячейкам. Мне потребуются только внешние границы. Я обновил свой вопрос скриншотом.
Это относительно легко получить. Пожалуйста, проверьте мои обновления.
Привет Роман. Спасибо тебе за это. Ваше решение работает. Могу я также уточнить у вас, как я могу добавить к нему линии границ? Я попытался запустить другой addStyle, но он перезапишет процентный стиль. Мне нужны только граничные линии, окружающие каждый столбец из строк 2:6.