【问题标题】:Read all Excel workbooks in the same directory each with multiple sheets and export each sheet as a .csv in R读取同一目录中的所有 Excel 工作簿,每个工作簿都有多个工作表,并将每个工作表导出为 R 中的 .csv
【发布时间】:2021-04-19 01:32:24
【问题描述】:

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

请帮助并感谢社区!

【问题讨论】:

    标签: r excel csv


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      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)
      

      @Modify 将部分代码用于@Ronak 的回答

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-12-24
        • 2021-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-14
        相关资源
        最近更新 更多