rexcelxlconnectreadxlr-xlsx

Using R to read out excel-colorinfo


Is there any way to read out the color-index of cells from excel files with R?

While I can set the cell color with packages like XLConnect or XLSX, I have found no way to extract the color-information from existing workbooks.


Solution

  • R-Bloggers provided a function that will do the job for you. I am including the answer here for future reference.

    Read the Excel file using xlsx package:

    library(xlsx)
    wb     <- loadWorkbook("test.xlsx")
    sheet1 <- getSheets(wb)[[1]]
    
    # get all rows
    rows  <- getRows(sheet1)
    cells <- getCells(rows)
    

    This part extracts the information that later will be used for getting background color (or other style information) of the cells:

    styles <- sapply(cells, getCellStyle) #This will get the styles
    

    This is the function that identifies/extracts the cell background color:

    cellColor <- function(style) 
       {
        fg  <- style$getFillForegroundXSSFColor()
        rgb <- tryCatch(fg$getRgb(), error = function(e) NULL)
        rgb <- paste(rgb, collapse = "")
        return(rgb)
       }
    

    error will handle the cells with no background color.

    Using sapply you can get the background color for all of the cells:

    sapply(styles, cellColor)
    

    You can also categorize/identify them by knowing the RGb codes:

    mycolor <- list(green = "00ff00", red = "ff0000")
    m     <- match(sapply(styles, cellColor), mycolor)
    labs  <-names(mycolor)[m]
    

    You can read more and learn how to apply it at R-bloggers and get the RGB codes from RapidTables.com