【问题标题】:excel batch load with specific sheetexcel批量加载特定工作表
【发布时间】:2021-03-01 18:48:49
【问题描述】:

我正在尝试将多个 xlsx 文件批量加载到单个数据帧中。到目前为止,我的这段代码效果很好。

file.list <- list.files(path = "base-files/", pattern='*.xlsx', full.names = TRUE)
test1 <- sapply(file.list, read_xlsx, simplify=FALSE) %>%  bind_rows(.id = "id")

我的问题与每个 xlsx 文件的张数有关。我特别希望从每个文件中仅加载表#2。 有什么办法可以在 sapply 函数中添加一个 sheet 标志?

编辑: 运行您推荐的代码后,我得到了一些错误。我想我需要安装 perl?

file.list <- list.files(path = "base-files/", pattern='*.xlsx', full.names = TRUE)
bind_rows(.id = "id")
test1 = lapply(file.list, function(x) {
                                        sheet_no <- if(sheetCount(x) == 1) 1 else 2
                                        read_xlsx(x, sheet = sheet_no)
                                       }) %>%   bind_rows(.id = 'id')



Error in findPerl(verbose = verbose) : 
perl executable not found. Use perl= argument to specify the correct path. 

编辑 刚刚为windows安装了perl https://www.activestate.com/products/perl/downloads/

【问题讨论】:

    标签: r excel dataframe


    【解决方案1】:

    我们可以指定sheet号码

    sapply(file.list, read_xlsx, sheet = 2, simplify=FALSE) %>%  
           bind_rows(.id = "id")
    

    根据?read_xlsx

    sheet - 要阅读的工作表。字符串(工作表的名称)或整数(工作表的位置)。如果工作表是通过范围指定的,则忽略。如果两个参数都没有指定工作表,则默认为第一个工作表。


    sheetCount 有一个来自 gdata 的函数

    library(gdata)
    lapply(file.list, function(x) {
              sheet_no <- if(sheetCount(x) == 1) 1 else 2
              read_xlsx(x, sheet = sheet_no)
        }) %>%
        bind_rows(.id = 'id')
                 
    

    【讨论】:

    • 非常感谢。我不知道我可以在 lapply 中使用 FN 标志。如果可以的话,一个后续问题:excel文件有1或2张。对于 2 张文件,我需要第 2 张纸。你能建议任何方法吗?
    • @AndresMora 是不是因为路径问题
    • @AndresMora 我使用的是 Mac,所以无法测试
    猜你喜欢
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    • 1970-01-01
    • 1970-01-01
    • 2020-12-09
    • 1970-01-01
    相关资源
    最近更新 更多