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

R如何读取目录下多个带密码保护的xlsx文件并转换合并为csv

批量处理带密码保护的XLSX文件转换合并方案

我们可以使用excel.link包实现带统一密码的XLSX文件读取,既可以兼容你原有先转CSV再合并的流程,也可以直接读取所有文件后合并省去中转步骤,具体实现如下:

前置准备

首先安装加载所需依赖包:

# 首次使用需先安装包
install.packages("excel.link")
# 加载依赖
library(excel.link)
library(plyr)

注:excel.link依赖Windows系统的COM组件,仅支持Windows环境运行,Mac/Linux环境可通过Python工具msoffcrypto-tool批量解密后再用原有代码处理


方案1:和原流程对齐,先转CSV再合并

和你原来的处理逻辑完全一致,仅替换XLSX读取逻辑,支持解锁加密文件:

# 配置统一密码,替换为你的实际密码
file_pwd <- "your_unified_password"
# 获取目录下所有xlsx文件
xlsx_files <- list.files(pattern = "\\.xlsx$", full.names = TRUE)

# 逐个解锁xlsx转存为csv
lapply(xlsx_files, function(f) {
  # 读取带密码的xlsx文件
  df <- xl.read.file(f, password = file_pwd)
  # 生成对应csv文件名
  csv_name <- gsub("\\.xlsx$", ".csv", f)
  # 写出csv文件
  write.csv(df, csv_name, row.names = FALSE, na = "")
})

# 合并目录下所有csv文件
csv_files <- list.files(pattern = "\\.csv$", full.names = TRUE)
combined_ll <- ldply(csv_files, read.csv, header = TRUE)
# 写出最终合并文件
write.csv(combined_ll, "final_combined.csv", row.names = FALSE)

方案2:无需中转CSV,直接读取合并

省去单独存每个CSV的步骤,处理效率更高:

# 配置统一密码,替换为你的实际密码
file_pwd <- "your_unified_password"
# 获取目录下所有xlsx文件
xlsx_files <- list.files(pattern = "\\.xlsx$", full.names = TRUE)

# 逐个解锁读取所有xlsx直接合并
combined_ll <- ldply(xlsx_files, function(f) {
  xl.read.file(f, password = file_pwd)
})
# 写出最终合并的CSV文件
write.csv(combined_ll, "final_combined.csv", row.names = FALSE)

注意事项

  • 如果你的XLSX包含多个工作表,可在xl.read.file中增加sheet参数指定要读取的工作表,默认读取第一个工作表
  • 可增加tryCatch逻辑处理密码不匹配、文件损坏等异常情况,避免批量处理中途中断
  • 若不需要保留原XLSX文件,可在读取完成后调用unlink(xlsx_files)批量删除

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:39:02