我正在尝试从多个工作簿中读取所有工作表,然后将每个工作表导出为自己的.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答案的部分代码