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

R读取多工作表xlsx文件逐表去重的代码问题排查

代码问题定位与修复方案

问题根因

仅能得到单工作表结果的原因

  • 循环中每次执行updateddata = unique(list_all_sheets[[i]])都会覆盖上一次的计算结果,循环结束后updateddata仅保留最后一张工作表的去重结果
  • 最终write.xlsx仅写入了这单个数据框,默认生成1个工作表,因此看不到其他工作表的处理结果
  • 循环内的assign操作未被后续逻辑使用,属于无效代码

输出首行首列出现...的原因

  • write.xlsx默认开启行名输出,会把数据框的行号写入Excel第一列,如果读入的原始表首列无列名,或tibble转data.frame时存在隐式列名,就会生成...1这类占位符,看起来就是首行首列有...符号

修复后代码

library(readxl)
library(openxlsx)

config_file_name <- '/RBIAPI3tables.xlsx'
config_xl <- paste0(currentPath, config_file_name)
config_xl_sheets_name <- excel_sheets(path = config_xl)

# 批量读取所有工作表
list_all_sheets <- lapply(config_xl_sheets_name, function(x) read_excel(path = config_xl, sheet = x))
names(list_all_sheets) <- config_xl_sheets_name

# 对每张工作表单独执行行去重
list_updated_sheets <- lapply(list_all_sheets, unique)

# 写入结果,所有去重后的表对应存入独立工作表,关闭行名输出
write.xlsx(list_updated_sheets, file = "Unique3tables.xlsx", showNA = FALSE, rowNames = FALSE)

优化说明

  • 用lapply替代for循环完成批量去重,代码更简洁,也避免了变量覆盖的问题
  • 直接传入去重后的工作表列表给write.xlsx,函数会自动把列表的每个元素作为独立工作表写入,和原始表的工作表名称一一对应
  • 新增rowNames = FALSE参数关闭行名输出,彻底解决...占位符问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:06:03