如何从具有条件格式的数据框列表中拆分为多个 Excel 工作簿

问题描述 投票:0回答:1

我有数据框列表。我需要将每个数据框导出到具有相同条件格式的单独 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")

我的任务是:

  1. 根据区域分割数据框
  2. 彩色标题背景
  3. 绘制边框和颜色标题背景
  4. 将包含文本总计的行加粗
  5. 将每个数据框导出到单独的 Excel 工作簿
r export-to-excel conditional-formatting
1个回答
0
投票

您没有共享您的数据集,因此我下面的示例使用

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)
© www.soinside.com 2019 - 2024. All rights reserved.