Есть ли способ прочитать индекс цвета ячеек из файлов Excel с помощью R?
Хотя я могу установить цвет ячейки с помощью таких пакетов, как XLConnect
или XLSX
, я не нашел способа извлечь информацию о цвете из существующих книг.
Есть ли способ прочитать индекс цвета ячеек из файлов Excel с помощью R?
Хотя я могу установить цвет ячейки с помощью таких пакетов, как XLConnect
или XLSX
, я не нашел способа извлечь информацию о цвете из существующих книг.
R-Bloggers предоставили функцию, которая сделает всю работу за вас. Я включаю ответ здесь для дальнейшего использования.
Прочитайте файл Excel, используя пакет xlsx
:
library(xlsx)
wb <- loadWorkbook("test.xlsx")
sheet1 <- getSheets(wb)[[1]]
# get all rows
rows <- getRows(sheet1)
cells <- getCells(rows)
Эта часть извлекает информацию, которая позже будет использоваться для получения цвета фона (или другой информации о стиле) ячеек:
styles <- sapply(cells, getCellStyle) #This will get the styles
Это function
, который идентифицирует/извлекает цвет фона ячейки:
cellColor <- function(style)
{
fg <- style$getFillForegroundXSSFColor()
rgb <- tryCatch(fg$getRgb(), error = function(e) NULL)
rgb <- paste(rgb, collapse = "")
return(rgb)
}
error
будет обрабатывать ячейки без цвета фона.
Используя sapply
, вы можете получить цвет фона для всех ячеек:
sapply(styles, cellColor)
Вы также можете классифицировать/идентифицировать их, зная коды RGb:
mycolor <- list(green = "00ff00", red = "ff0000")
m <- match(sapply(styles, cellColor), mycolor)
labs <-names(mycolor)[m]
Вы можете прочитать больше и узнать, как его применять, по адресу Р-блогеры
Коды RGB можно получить на сайте RapidTables.com.
Старый вопрос, но, возможно, это может помочь кому-то в будущем.
В библиотеке POI (java) наблюдается странное поведение (по крайней мере, на моем компьютере). Не правильно передает цвета. Код, представленный в ответе @M--, хорошо работает, когда цвет является основным цветом (индексированным цветом), но не работает, когда цвет, например, в оттенках серого. Чтобы обойти это, вы можете использовать следующий код, используя функцию getTint ()
. Оттенок — это число от -1 (темный) до 1 (светлый), и комбинируя его с функцией RGB (getRgb ()
), вы можете полностью восстановить цвет.
cell_color <- function(style){
fg <- style$getFillForegroundXSSFColor()
hex <- tryCatch(fg$getRgb(), error = function(e) NULL)
hex <- paste0("#", paste(hex, collapse = ""))
tint <- tryCatch(fg$getTint(), error = function(e) NULL)
if(!is.null(tint) & !is.null(hex)){ # Tint varies between -1 (dark) and 1 (light)
rgb_col <- col2rgb(col = hex)
if(tint < 0) rgb_col <- (1-abs(tint))*rgb_col
if(tint > 0) rgb_col <- rgb_col + (255-rgb_col)*tint
hex <- rgb(red = rgb_col[1, 1],
green = rgb_col[2, 1],
blue = rgb_col[3, 1],
maxColorValue = 255)
}
return(hex)
}
Некоторые ссылки в помощь:
https://poi.apache.org/apidocs/dev/org/apache/poi/hssf/usermodel/HSSFExtendedColor.html#getTint--
https://bz.apache.org/bugzilla/show_bug.cgi?id= 50787а>
Получение цветов заливки Excel с помощью Apache POI