1. 有一些话要说

我们在日常工作中,经常会遇到如下场景:

1.将一个已下发的固定模板Excel文件回收合并;

2.将一个Excel文件拆成多份,进行协同作业;

有些朋友可能会说,现在的线上表格工具功能已经很完善了,不需要再用这种老办法,将文件发来发去。也有些朋友可能会说,我使用VBA脚本或Power Query等等方法都可以解决,不需要使用到Python。

但确实会存在有人不会用这些工具,以及过去的很多方法或复杂或局限或效率低下,所以就有了本片文章。

在你看到的时候,可能会有部分需求场景没有覆盖到你,本篇文章也会根据评论区的建议进行长期更新,废话已经很多了,我们马上进入正题。

*本文并不会告诉你如何使用python,请在有基础的python知识前提下进行学习

2. 涉及到的库:

pandas、openpyxl、pathlib

3. 批量合并Excel文件:

举例:

假设在data路径下有多个Excel文件:file1.xlsxfile2.xlsxfile3.xlsx,每个文件的数据结构(即表头)都相同,我们要将它们合并为一个名为combined.xlsx文件。

# 批处理合并Excel文件
import pandas as pd
from pathlib import Path

# 获取所有excel文件的路径
file_paths = Path('data').glob('*.xlsx')

# 读取并合并所有excel文件
data_frames = [pd.read_excel(file,engine='openpyxl') for file in file_paths]
combined_df = pd.concat(data_frames, ignore_index=True)

# 保存合并后的DataFrame到一个新的Excel文件
combined_df.to_excel('combined.xlsx',index=False)

文件的位置路径需要根据实际情况修改哦,稍微讲解一下路径书写的格式。

# 绝对路径
path = 'C:/Users/username/Documents/file.txt'

# 相对路径
path = './Documents/file.txt'

4. 批量拆分Excel文件:

4.1 按行数进行拆分Excel

举例:

将一个大Excel文件large_file.xlsx拆分为每个包含200行数据的小文件,名字为chunk_{i + 1}.excel,i+1为具体的拆分行数。

# 批处理按照行数拆分Excel文件
import pandas as pd

# 读取大Excel文件
df = pd.read_excel('large_file.xlsx', engine='openpyxl')

# 拆分数据
chunk_size = 200
num_chunks = (len(df) + chunk_size - 1) // chunk_size

for i in range(num_chunks):
    start_row = i * chunk_size
    end_row = min((i + 1) * chunk_size, len(df))
    chunk_df = df.iloc[start_row: end_row]

    # 保存拆分后DataFrame到新的Excel文件
    chunk_df.to_excel(f'chunk_{i + 1}.excel', index=False)

4.2 按列进行拆分Excel

举例:

将一个大Excel文件original.xlsx,根据column_to_split_by列里的内容进行拆分,最后以split_{value}为名称进行命名保存。

# 批处理按列内容数拆分Excel文件
import pandas as pd

# 读取大Excel文件
original_file = 'original.xlsx'
sheet_name = 'Sheet1' # 假设你要拆分的工作表名称为'Sheet1'
df = pd.read_excel(original_file, sheet_name= sheet_name)

# 选择你要根据哪一列的唯一值来拆分工作表
split_column = 'column_to_split_by' # 替换为你的列名
unique_values = df[split_column].unique()

# 遍历唯一值并保存每个子DataFrame到新的Excel文件
for value in unique_values:
    # 筛选数据
    sub_df = df[df[split_column] == value]
    # 构造新的文件名
    new_file = f'split_{value}.xlsx'
    # 写入新的Excel文件
    with pd.ExcelWriter(new_file, engine='openpyxl') as writer:
        sub_df.to_excel(writer, index=False, sheet_name=sheet_name)
print(f'Split into {len(unique_values)} files.')

以上内容基本满足了,日常对Excel合并和拆分的需求,希望能够实际帮助的搜索到本文的朋友。