读取同一目录中的所有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

请帮忙,谢谢大家!

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

使用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)  
})
})

在不知道下划线数据的情况下,很难说是什么原因导致了错误,以及是什么原因造成了错误,所以我会修改您的代码,以确保它能读取每张表,并在发生错误时输出该错误。请尝试一下,看看错误的原因是什么:

library(readxl)
files.to.read <- list.files(path = "/Users/filelocation", pattern="xlsx",
full.names = TRUE)
read_excel_to_csv <- function(x) {
sheets <- excel_sheets(x)
lapply(sheets, function(y) {
tryCatch({
df = read_excel(x, sheet=y)
write.csv(df,
path = paste0(tools::file_path_sans_ext(basename(x)), "_", y, '.csv'),
row.names=FALSE)  
}, error = function(e) {
print(paste0("Error at file: ", x, " --- sheet: ", y))
})    
})
}
lapply(files.to.read, read_excel_to_csv)

@修改为使用@Ronak答案的部分代码

相关内容

  • 没有找到相关文章