我有数据框列表。我需要将每个数据框导出到具有相同条件格式的单独 Excel 工作簿中。
我尝试使用此代码,但无法将每个数据框导出到单独的 Excel 工作簿。
for (i in 1:length(final_tables)) {
addWorksheet(wbs, sheetName=names(final_tables[i]))
boldRows[[i]]<-(data.frame(which(final_tables[[i]] == "total", arr.ind=TRUE)))
ne_style<-createStyle(textDecoration = "bold")
head_style<-createStyle(fgFill ="#99CCFF" ,border = c("top", "bottom", "left", "right"),borderStyle = "thick")
addStyle(wbs,sheet =names(final_tables[i]), cols = 1:ncol(final_tables[[i]]), rows = boldRows[[i]][,1]+1,
style = ne_style, gridExpand = TRUE)
writeData(wbs, sheet=names(final_tables[i]), x=final_tables[[i]],headerStyle = head_style)
}
saveWorkbook(wbs, "iris.xlsx")
我的任务是:
您没有共享您的数据集,因此我下面的示例使用
penguins
数据集
来自 palmerpenguins
包。
library(openxlsx)
library(palmerpenguins)
library(purrr)
首先,我们创建一个函数来创建工作簿,添加工作表, 添加数据,应用您指定的样式,并将结果存储为 XLSX 文件。
create_style_save_workbook <-
function(data,
sheet_name,
bold_row_trigger_string,
bold_row_trigger_column) {
wb <- createWorkbook()
addWorksheet(wb,
sheet_name)
writeData(wb,
data,
sheet = sheet_name)
bold_rows <-
which((data[bold_row_trigger_column] == bold_row_trigger_string)) + 1
addStyle(
wb,
sheet_name,
createStyle(textDecoration = "bold"),
rows = bold_rows,
cols = 1:ncol(data),
gridExpand = TRUE
)
head_style <-
createStyle(
fgFill = "#99CCFF",
border = c("top", "bottom", "left", "right"),
borderStyle = "thick"
)
addStyle(
wb,
sheet = sheet_name,
cols = 1:ncol(data),
rows = 1,
style = head_style,
gridExpand = TRUE
)
saveWorkbook(wb, paste0(sheet_name, ".xlsx"), overwrite = TRUE)
}
在我的示例中,我没有将“总”行加粗,而是将其中的所有行加粗
sex
栏是“女性”。
我们可以使用此函数将整个数据集导出为 XLSX 文件:
create_style_save_workbook(penguins, "penguins", "female", 7)
要分割数据帧并将每个子集写入单独的文件中,我们可以使用
split()
和 purrr::imap()
。
我不是按区域进行拆分,而是在此处的
islands
列上进行拆分。
split(penguins,
penguins$island) |>
imap(create_style_save_workbook, "female", 7)
#> $Biscoe
#> [1] 1
#>
#> $Dream
#> [1] 1
#>
#> $Torgersen
#> [1] 1
对于您的数据,这应该有效:
final_tables |>
imap(create_style_save_workbook, "total", 3)