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

R语言批量追加多Excel文件同名工作表运行报错原因求解

报错产生原因
  • 循环索引范围与实际工作表数量不匹配:你描述中每个Excel仅包含10个工作表,但代码中内层循环设置为for (i in 1:31),当i超过工作表总数时,x1_data[[i]]、book[[i]]会读取到空值,rbind生成的结果维度异常,无法正常赋值。
  • 变量初始化与赋值逻辑错误:你初始化sheet_为空白数据框,循环中使用sheet_[i]试图给数据框第i列赋值,但rbind(x1_data[[i]], book[[i]])生成的是完整的合并后工作表(多列二维表),把二维表赋值给单列的位置,维度完全不匹配,就会触发“替换行数与现有数据行数不一致”的报错。
  • 文件路径拼接缺失:list.files()默认仅返回文件名而非完整路径,你指定了读取路径为E:/Report_folder,但直接把返回的文件名传给import_list()时,程序会在当前工作目录查找文件,找不到就会读取为空,导致book对象内容异常。
  • 主文件重复读取风险:如果你的主文件report_1h.xlsx也存放在E:/Report_folder路径下,循环时会重复读取主文件和自身合并,造成数据重复甚至逻辑错误。
修正后可用代码
library(rio)
# 读取主文件数据
x1_data <- import_list("report_1h.xlsx")
# 获取待合并文件列表,排除主文件,返回完整路径
report_list <- list.files(path = 'E:/Report_folder', 
                          pattern = '\\.xlsx$', 
                          full.names = TRUE,
                          exclude = "report_1h.xlsx")
# 获取所有工作表名称,用名称索引比数字索引更稳妥
sheet_names <- names(x1_data)

for (file in report_list){
  # 读取当前待合并文件的所有工作表
  book <- import_list(file)
  # 按工作表名称循环合并
  for (sheet in sheet_names){
    # 直接追加到主文件对应工作表中,不需要额外中转变量
    x1_data[[sheet]] <- rbind(x1_data[[sheet]], book[[sheet]])
  }
}

# 合并完成后导出结果
export(x1_data, "合并结果.xlsx")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:36:03