gpt4 book ai didi

r - 使用 xlsx 为 Excel 单元格着色

转载 作者:行者123 更新时间:2023-12-02 00:35:02 24 4
gpt4 key购买 nike

初始代码:

假设我们使用此命令来创建虚拟数据:

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

输出:

                                           X   Y
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,但有些值是彩色的。

提前谢谢您,

最佳答案

我实质上是从 this question and my answer there 复制代码并针对此用例进行一些调整。我不确定这方面的礼仪,但我只是想表明这是可以做到的!任何人,请告诉我,如果我在重复使用链接问题中的代码来获得此答案时做了一些不应该做的事情。如果现在另一个问题已得到解答,这被视为重复,我对此表示同意。只是想帮忙!

首先,稍微重新格式化数据。

# 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中的函数创建工作簿,然后获取单元格值。

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 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)

关于r - 使用 xlsx 为 Excel 单元格着色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18511249/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com