You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R导出Excel时实现行分组与表格缩进?

自动化实现Excel分组聚合导出

你需要将DataFrame导出为Excel时,实现sex列按分组合并单元格的格式(如期望输出所示),以下是基于openxlsx包的自动化解决方案,可直接复用在同结构的真实数据上:

完整代码

library(tidyverse)
library(openxlsx)

# 示例数据处理(真实数据直接替换此处的df即可)
df <- starwars %>% 
  select(name, height, mass, hair_color, skin_color, eye_color, sex) %>% 
  filter(!is.na(sex)) %>% 
  group_by(sex) %>% 
  slice_head(n = 3) %>% 
  ungroup() %>% 
  select(sex, everything())

# 创建Excel工作簿与工作表
wb <- createWorkbook()
addWorksheet(wb, sheetName = "分组数据")

# 将数据写入工作表(表头在第2行,数据从第3行开始)
writeData(wb, sheet = "分组数据", x = df, startRow = 2, startCol = 1)

# 设置表头样式(增强可读性,可选)
header_style <- createStyle(fontSize = 12, fontColour = "#FFFFFF", fgFill = "#4F81BD", 
                            halign = "center", valign = "center", textDecoration = "bold")
addStyle(wb, sheet = "分组数据", style = header_style, rows = 2, cols = 1:ncol(df))

# 按sex分组计算需要合并的Excel单元格范围
group_info <- df %>% 
  group_by(sex) %>% 
  summarise(
    start_row = cur_group_rows()[1] + 2,  # 对应Excel数据起始行(表头占1行)
    end_row = start_row + n() - 1
  ) %>% 
  ungroup()

# 批量合并同一分组的sex列单元格
for (i in 1:nrow(group_info)) {
  mergeCells(wb, sheet = "分组数据", 
             rows = group_info$start_row[i]:group_info$end_row[i], 
             cols = 1)
}

# 设置合并后单元格的垂直居中格式
merge_style <- createStyle(valign = "center")
addStyle(wb, sheet = "分组数据", style = merge_style, 
         rows = unlist(map2(group_info$start_row, group_info$end_row, seq)), 
         cols = 1, gridExpand = TRUE)

# 保存最终文件
saveWorkbook(wb, "分组数据.xlsx", overwrite = TRUE)

核心逻辑说明

  • 数据适配:保持你原有的数据筛选、分组逻辑,只需确保分组列(示例中为sex)在DataFrame的第一列,若位置不同,调整代码中cols参数对应列号即可。
  • 格式自动化:通过分组计算每个类别对应的Excel行范围,批量完成单元格合并,同时配置统一的表头、合并单元格样式,完全匹配期望输出格式。
  • 复用性:后续更新数据时,仅需替换代码中的df对象,即可一键生成符合要求的Excel文件。

内容的提问来源于stack exchange,提问作者Ruam Pimentel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 09:40:25