【问题标题】:Combining multiple worksheets from multiple excel workbooks into a single workbook via. R通过将多个 Excel 工作簿中的多个工作表合并到一个工作簿中。 R
【发布时间】:2021-08-09 05:05:11
【问题描述】:

假设我有两个 Excel 工作簿(例如 A.xlsx 和 B.xlsx),每个工作簿都包含多个工作表(例如 A.xlsx 中的“a1”和“a2”;“b1”、“b2”和“b3” “在 B.xlsx 中)。请注意,这些工作表都有自己的条件格式、过滤、缩放和其他查看选项。

鉴于此设置,是否可以通过生成组合工作簿。 R(例如 C.xlsx)具有来自 A.xlsx 和 B.xlsx 的 5 个工作表(例如 C.xlsx 中的“a1”、“a2”、“b1”、“b2”和“b3”),此外还保留了所有原始条件格式、过滤、缩放和其他查看选项?感谢您的帮助!

【问题讨论】:

    标签: r excel openxlsx xlconnect r-xlsx


    【解决方案1】:

    我们可以在map2 中同时读取两个数据集。从“A.xlsx”和“B.xlsx”数据中获取工作表名称。使用工作表名称创建文件路径的命名向量,使用imap 循环遍历该向量,使用read_excel 读取工作表,在创建用于标识工作表名称的列后将它们绑定在一起,然后组合来自imaplist 输出到单个listimap

    library(purrr)
    library(dplyr)
    library(readxl)
    library(openxlsx)
    
    # // replace the path/to/your - actual path
    fileA <- 'path/to/your/A.xlsx'
    fileB <- 'path/to/your/B.xlsx'
    nmA <- excel_sheets(path = fileA)
    nmB <- excel_sheets(path = fileB)
    nm1A <- setNames(rep(fileA, length(nmA)), nmA)
    nm1B <- setNames(rep(fileB, length(nmB)), nmB)
    lstC <- imap(c(nm1A, nm1B), ~ 
                  read_excel(.x, sheet = .y) %>%
                      mutate(sheetname = .y))
    names(lstC) <- c(nmA, nmB)
    write.xlsx(lstC, '/path/to/your/C.xlsx')
    

    【讨论】:

    • 感谢您的解决方案。但是有几个问题,当我运行 map2_dfr 代码行时,会导致以下错误“错误:映射的向量必须具有一致的长度:”。我删除了 B.xlsx 中的一张工作表(确切地说是 b3),但随后导致另一个错误(错误:未找到工作表'b1')。非常感谢!
    • 你能显示nmAnmB的输出吗?我假设两者都有相同数量的元素
    • @user3624032 抱歉,我想它的长度是一样的
    • nma 结果:“a1”“a2”;而 nmB 的结果是:“b1”“b2”。当我在 B.xlsx 中有 3 张纸时,nmB 的结果是“b1”“b2”“b3”。
    • 感谢您的帮助 - 它现在显示以下错误:“as_mapper(.f, ...) 中的错误:缺少参数“.f”,没有默认值”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    • 2021-01-24
    • 2022-12-24
    • 1970-01-01
    相关资源
    最近更新 更多