首页 > 解决方案 > 读取同一目录中的所有 Excel 工作簿,每个工作簿都有多个工作表,并将每个工作表导出为 R 中的 .csv

问题描述

我正在尝试从多个工作簿中读取所有工作表,然后将每个工作表导出为自己的 .csv。我运行了这段代码:

files.to.read <- list.files(path = "/Users/filelocation", pattern="xlsx",
                            full.names = TRUE)

然后我应用这行代码将目录中的所有 xlsx 转换为 csv,但是它不考虑每个 xlsx 文件中的各个工作表。

lapply(files.to.read, function(x) {
  df = read_excel(x, sheet=1)
  write.csv(df, gsub("xlsx", "csv", x), row.names=FALSE)
})

考虑工作表的最佳方法是什么?我尝试在函数中使用 excel_sheets() 和 map_df() 但它一直返回

Error: `path` must be a string

请帮助并感谢社区!

标签: rexcelcsv

解决方案


您需要先阅读所有工作簿,然后从每个工作簿中阅读其中的所有工作表。

使用lapply您可以尝试:

library(readxl)

files.to.read <- list.files(path = "/Users/filelocation", 
                            pattern="xlsx", full.names = TRUE)

lapply(files.to.read, function(x) {
  sheets <- excel_sheets(x)
  lapply(sheets, function(y) {
    df = read_excel(x, sheet=y)
    write.csv(df, paste0(tools::file_path_sans_ext(basename(x)), y, '.csv'), 
              row.names=FALSE)  
  })
})

推荐阅读