首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用R读出excel-彩色信息

用R读出excel-彩色信息
EN

Stack Overflow用户
提问于 2017-03-23 16:54:05
回答 2查看 7K关注 0票数 16

有没有办法用R从excel文件中读出单元格的颜色索引?

虽然我可以使用像XLConnectXLSX这样的包来设置颜色,但我还没有找到从现有工作簿中提取颜色信息的方法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-22 19:52:57

R-Bloggers提供了一个功能,可以为您完成这项工作。我在此列出答案,供日后参考。

使用xlsx包读取excel文件:

代码语言:javascript
运行
复制
library(xlsx)
wb     <- loadWorkbook("test.xlsx")
sheet1 <- getSheets(wb)[[1]]

# get all rows
rows  <- getRows(sheet1)
cells <- getCells(rows)

此部分提取稍后将用于获取单元格的背景颜色(或其他样式信息)的信息:

代码语言:javascript
运行
复制
styles <- sapply(cells, getCellStyle) #This will get the styles

function --识别/提取单元格背景色:

代码语言:javascript
运行
复制
cellColor <- function(style) 
   {
    fg  <- style$getFillForegroundXSSFColor()
    rgb <- tryCatch(fg$getRgb(), error = function(e) NULL)
    rgb <- paste(rgb, collapse = "")
    return(rgb)
   }

error将处理没有背景色的单元格。

使用sapply,您可以获得所有单元格的背景色:

代码语言:javascript
运行
复制
sapply(styles, cellColor)

还可以通过了解RGb代码对它们进行分类/标识:

代码语言:javascript
运行
复制
mycolor <- list(green = "00ff00", red = "ff0000")
m     <- match(sapply(styles, cellColor), mycolor)
labs  <-names(mycolor)[m]

您可以阅读更多内容,并学习如何在R-博客上应用它。

您可以从RapidTables.com获得RGB代码。

票数 21
EN

Stack Overflow用户

发布于 2019-10-01 18:45:09

老问题,但也许它可以帮助某人在未来。

POI (java)库中有一种奇怪的行为(至少在我的计算机上)。这是没有得到正确的颜色。当颜色是基本颜色(索引颜色)时,@M--的答案中提供的代码工作得很好,但是当颜色是灰度时就不能工作了。为了绕开,您可以使用下面的代码使用getTint ()函数。Tint是介于-1 (暗)到1(光)之间的数字,结合RGB (getRgb ())函数,可以完全恢复颜色。

代码语言:javascript
运行
复制
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--

bug.cgi?id=50787

使用Apache获取Excel填充颜色

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42982344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档