Excel单元格着色使用xlsx

初始代码:

让我们假设我们正在使用这个命令来创build虚拟数据:

Data <- data.frame( X = paste(c(sample(1:10),sample(1:10)), collapse=";"), Y = sample(c("yes", "no"), 10, replace = TRUE) ) 

输出:

  XY 1 10;7;4;3;8;6;5;2;9;1;3;5;10;2;9;6;8;4;1;7 yes 2 10;7;4;3;8;6;5;2;9;1;3;5;10;2;9;6;8;4;1;7 no 3 10;7;4;3;8;6;5;2;9;1;3;5;10;2;9;6;8;4;1;7 no 4 10;7;4;3;8;6;5;2;9;1;3;5;10;2;9;6;8;4;1;7 yes 5 10;7;4;3;8;6;5;2;9;1;3;5;10;2;9;6;8;4;1;7 no 6 10;7;4;3;8;6;5;2;9;1;3;5;10;2;9;6;8;4;1;7 yes 7 10;7;4;3;8;6;5;2;9;1;3;5;10;2;9;6;8;4;1;7 no 8 10;7;4;3;8;6;5;2;9;1;3;5;10;2;9;6;8;4;1;7 yes 9 10;7;4;3;8;6;5;2;9;1;3;5;10;2;9;6;8;4;1;7 yes 10 10;7;4;3;8;6;5;2;9;1;3;5;10;2;9;6;8;4;1;7 yes 

题:

使用xlsx包我可以将X列数据输出到一个有颜色的excel文件。

有一种方法,我可以让颜色可以说的价值大于5红色和小于5蓝色 ,放在同一个单元格的一切。 基本上我只是把这个表写到excel中,但是有些值是有颜色的。

先谢谢你,

我怀疑可以直接从R更改Excel的条件格式。 因此,首先打开Excel工作簿,并为列“X”设置条件格式,即可进入所需的任何颜色与值的条件。 那么当你从R写入工作簿时,着色就会发生。

我基本上从这个问题复制代码,我的答案在那里 ,并对这个用例做一些调整。 我对这个礼仪不太确定,但我只是想表明这是可以做到的! 任何人,让我知道,如果我已经做了一些我不应该重复使用链接的问题中的代码这个答案。 如果这个问题被认为是重复的,那么另外一个问题就会被解答,那我就没问题了。 只是想帮助!

首先,重新格式化一些数据。

 # split the X column so there will be one numeric entry per cell d <- matrix(as.numeric(unlist(strsplit(as.character(Data$X), ";"))), ncol = 20, byrow = TRUE) d <- data.frame(d, Data$Y) cols <- length(d[1, ]) # number of columns, we'll use this later 

其次,我们可以使用xlsx函数来创build工作簿,然后获取单元格的值。

 library(xlsx) # exporting data.frame to excel is easy with xlsx package sheetname <- "mysheet" write.xlsx(d, "mydata.xlsx", sheetName=sheetname) file <- "mydata.xlsx" # but we want to highlight cells if value greater than or equal to 5 wb <- loadWorkbook(file) # load workbook fo1 <- Fill(foregroundColor="blue") # create fill object # 1 cs1 <- CellStyle(wb, fill=fo1) # create cell style # 1 fo2 <- Fill(foregroundColor="red") # create fill object # 2 cs2 <- CellStyle(wb, fill=fo2) # create cell style # 2 sheets <- getSheets(wb) # get all sheets sheet <- sheets[[sheetname]] # get specific sheet rows <- getRows(sheet, rowIndex=2:(nrow(d)+1)) # get rows # 1st row is headers cells <- getCells(rows, colIndex = 2:cols) # get cells # in the wb I import with loadWorkbook, numeric data starts in column 2 # The first column is row numbers. The last column is "yes" and "no" entries, so # we do not include them, thus we use colIndex = 2:cols values <- lapply(cells, getCellValue) # extract the cell values 

接下来我们find需要按照标准进行格式化的单元格。

 # find cells meeting conditional criteria > 5 highlightblue <- NULL for (i in names(values)) { x <- as.numeric(values[i]) if (x > 5 && !is.na(x)) { highlightblue <- c(highlightblue, i) } } # find cells meeting conditional criteria < 5 highlightred <- NULL for (i in names(values)) { x <- as.numeric(values[i]) if (x < 5 && !is.na(x)) { highlightred <- c(highlightred, i) } } 

最后,应用格式并保存工作簿。

 lapply(names(cells[highlightblue]), function(ii) setCellStyle(cells[[ii]], cs1)) lapply(names(cells[highlightred]), function(ii) setCellStyle(cells[[ii]], cs2)) saveWorkbook(wb, file)