我有多个文件名,例如C1.xlsx; C2.xlsx; C3.xlsx; C4.xlsx等,其中每个文件都有多个工作表,例如C_1; C_2; C_3等等,也就是说,所有文件中的工作表名称均相同,而所有文件中的工作表数均相同。 现在,我需要合并所有文件中具有相似工作表名称的所有工作表。此外,每个工作表中的列名都相同。
我正在使用以下代码读取文件夹中的所有excel文件
import os
import shutil
import subprocess
dest = '/path/to/destinationFolder'
source = '/path/to/directory/from/docFiles'
for root, subdirs, files in os.walk(source):
for file in files:
path = os.path.join(root, file)
shutil.move(path, dest)
for filename in os.listdir(dest):
if filename.endswith('.doc'):
subprocess.call(['soffice', '--headless', '--convert-to', '--outdir', '/home/allDocxFiles', filename])
subprocess.call(['rm', 'filename])
我拥有的excel文件如下所示:
library(readxl)
files <- list.files(path = "~/Dropbox/Data/multiple_files", pattern =
"*.xlsx", full.names = T)
tbl <- sapply(files, read_excel, simplify=FALSE) %>%
bind_rows(.id = "id")
excel文件中的组合工作表应如下所示:
C1.xlsx (worksheet:C_1) (worksheet:C_2) (worksheet:C_3)
A B C D E A B C D E A B C D E
1 4 6 8 C_1 2 4 6 1 C_2 1 4 6 8 C_3
3 56 7 8 C_1 2 3 6 8 C_2 2 3 5 6 C_3
2 4 6 1 C_1 7 8 3 4 C_2 3 4 6 7 C_3
C2.xlsx (worksheet:C_1) (worksheet:C_2) (worksheet:C_3)
A B C D E A B C D E A B C D E
3 7 1 3 C_1 1 4 7 1 C_2 1 9 6 1 C_3
1 6 9 2 C_1 2 3 6 8 C_2 2 3 5 6 C_3
2 4 6 1 C_1 7 1 3 4 C_2 3 4 2 7 C_3
C3.xlsx (worksheet:C_1) (worksheet:C_2) (worksheet:C_3)
A B C D E A B C D E A B C D E
9 4 6 8 C_1 1 4 6 1 C_2 1 4 1 1 C_3
3 5 7 1 C_1 1 3 6 4 C_2 2 1 5 1 C_3
2 7 6 1 C_1 7 7 3 4 C_2 3 4 6 7 C_3
我正在寻找代码,以首先读取文件夹中的所有excel文件,然后合并工作表
预先感谢
答案 0 :(得分:1)
openxlsx
或writexl
将起作用。我认为writexl
快一点。
从文档中:
将数据帧写入xlsx文件。用(多个)创建一个xlsx 命名工作表,只需将
x
设置为数据帧的命名列表即可。
以下代码“应该”起作用:
spreadsheets <- purrr::map(files, function(.x){
.spreadsheet <- purrr::map(1:3, .file = .x, function(.x, .file){
.sheet <- readxl::read_xlsx(.file, sheet = .x)
})
})
bound_ss <- purrr::map(1:3, .spreadsheet = spreadsheets, function(.x, .spreadsheet){
do.call("rbind", purrr::map(.spreadsheet,.ind = .x, function(.x, .ind){
purrr::pluck(.x, .ind)
}))
})
# Should be a list of three sheets in the long format you expect
names(bound_ss) <- paste0("Sheet", 1:3)
writexl::write_xlsx(bound_ss, path = "~/Dropbox/Data/multiple_files/sheet.xlsx")
## Sorting based on a column C1
library(magrittr)
bound_ss %<>% purrr::map(~ dplyr::arrange(.x, C1)) # ascending
bound_ss %<>% purrr::map(~ dplyr::arrange(.x, dplyr::desc(C1))) # descending
答案 1 :(得分:1)
为了订购数据框列表,我使用了以下代码
sorted_bound_ss <- lapply(combined, function(C_1){
C_1[order(C_1$A),]
})
它起作用了....