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
相关产品推荐
相关产品推荐

