r - 使用 openxlsx R 将不同工作簿中的工作表附加到一个工作簿中(保持格式)
问题描述
我有不同的 openxlsx 工作簿,比如说 wb1、wb2 和 wb3,每个工作簿都有不同格式的工作表。我需要一些方法将所有工作表附加到同一个工作簿中,请注意,制作一个工作簿并从头开始添加每个工作表对我来说不是一个选项,因为我需要单独的每个 .xlsx 文件,然后是一个包含所有文件的大文件工作表(保持格式)。
如果您知道如何从不同的 wbs 中克隆工作表,那也可以解决问题。
提前致谢!
解决方案
尝试这个:
library(openxlsx)
library(xlsx)
library(readxl)
library(purrr)
假设您创建了两个工作簿,每个工作簿都有多个工作表:
我正在使用包中的示例工作簿openxlsx
和xlsx
列出我使用的示例测试 xlsx 文件的工作簿文件路径,实际上您只需使用
your_wb <- "path_to_your_file.xlsx"
# sample workbooks
wb1 <- system.file("extdata", "readTest.xlsx", package = "openxlsx")
wb2 <- system.file("tests", "test_import.xlsx", package = "xlsx")
# vector of workbook paths
wbs <- c(wb1, wb2)
# read worksheet names from both workbooks into a list which becomes the contents of your "cloned" or "big" workbook
sh_nm <- map(wbs, excel_sheets)
# number of sheets in each workbook
sh_nr <- unlist(map(sh_nm, length))
# list of workbook names to match the number of sheets respectively for each workbook
wb_list <- rep(wbs, sh_nr)
# list of all sheet names
sh_list <- unlist(sh_nm)
# combine data from all worksheets and give each list element a unique name
sh_all <-
map2(wb_list, sh_list, ~openxlsx::read.xlsx(.x, sheet = .y)) %>%
set_names(paste(rep(c("wb1", "wb2"), sh_nr), sh_list, sep = "_"))
#save data, openxlsx automatically places each list element into a separate worksheet with the list element name as the worksheet name.
openxlsx::write.xlsx(sh_all, "wb_all.xlsx")
由reprex 包于 2020-07-10 创建(v0.3.0)
推荐阅读
- python - 如何在 tensorflow 2.0 中监控梯度流?
- msbuild - 不安装证书可以使用 MSBuild 的 SignFile 吗?
- azure - Renci.sshnet 未从 Azure Key Vault 正确读取秘密私钥文件
- java - 多 RecyclerView 的 Adapter 实现的好方法是什么?
- ios - UITableViewCell 中的 UILabel 意外剪裁
- c++ - 如何检测 USB 驱动程序启用/禁用
- node.js - 我有内存泄漏吗?(节点)
- c++ - 是否有更易于维护的方式来初始化结构?
- python - 如何直接获取对象的描述;print(object) 的输出
- pine-script - 如何使指标 ATR2 每日 /2 + 每日低点?