如何用R合并含同名工作表的两个工作簿?报错解决
解决Excel工作簿对应工作表行合并的R代码错误
错误原因
出现Error in file.exists(file): invalid 'file' argument的核心原因:
- 第二段代码中,
read.xlsx()函数的第一个参数要求是文件路径字符串,但你传入了loadWorkbook()返回的工作簿对象,导致函数无法识别有效的文件路径。 - 第一段代码逻辑错误:循环中重复添加同名工作表,且未实现行合并,只是将两个工作簿的工作表分别写入新工作簿。
修正后的代码
使用openxlsx包实现需求,以下是正确的代码:
library(openxlsx) # 替换为你的实际文件路径 wb1_path <- "Workbook1.xlsx" wb2_path <- "Workbook2.xlsx" output_path <- "combined_workbook.xlsx" # 创建合并后的工作簿 combined_wb <- createWorkbook() # 获取第一个工作簿的所有工作表名称(两个工作簿表名一致,取其一即可) sheet_names <- getSheetNames(wb1_path) # 循环处理每个工作表 for (sheet in sheet_names) { # 读取两个工作簿中对应工作表的数据 data1 <- read.xlsx(wb1_path, sheet = sheet) data2 <- read.xlsx(wb2_path, sheet = sheet) # 合并行数据(确保列名一致,rbind可直接使用) combined_data <- rbind(data1, data2) # 添加工作表并写入合并后的数据 addWorksheet(combined_wb, sheetName = sheet) writeData(combined_wb, sheet = sheet, x = combined_data) } # 保存合并后的工作簿 saveWorkbook(combined_wb, file = output_path, overwrite = TRUE)
代码说明
- 路径设置:替换代码中的文件路径为你本地的实际路径,确保文件存在且路径格式正确(Windows路径注意用
/或转义\\)。 - 读取数据:直接通过文件路径调用
read.xlsx()读取对应工作表,避免传入工作簿对象导致的参数错误。 - 行合并:利用
rbind()合并两个数据表,前提是对应工作表的列名完全一致(符合需求描述)。 - 写入保存:创建新工作表并写入合并后的数据,最后保存为新工作簿。
内容的提问来源于stack exchange,提问作者Catalyst
相关产品推荐
相关产品推荐

