Excel合并/拆分多个工作表/簿(Python实现)

概述

在工作中,我们常会用到将EXCEL拆分/合并为多个工作表/簿,如全国的订单表,需要根据省份列拆分下发至对应的省、各省份数据需要汇总、...... 借助Python应该如何操作呢?

1. EXCEL拆分成多个工作表

需求:

根据 “省份” 列的不同值将数据拆分同一个工作簿下多个工作表。

操作:

仅需将 下述代码中的 文件路径、拆分字段名 替换你自己的即可

代码:

#  导入所需要的模块,没有就去终端安装 pip install pandas openpyxl
import pandas as pd
from openpyxl import Workbook
from openpyxl.utils.dataframe import dataframe_to_rows



# 读取需要拆分的excel 文件
file_path = 'D:/data/全国订单.xlsx'
df = pd.read_excel(file_path)
df.head()


# 创建一个新的 Excel 工作簿
wb = Workbook()
ws = wb.active


# 根据 省份 列内容拆分成多个工作表
for category in df['省份'].unique():
    df_category = df[df['省份'] == category]
    ws = wb.create_sheet(title=category)
    for r in dataframe_to_rows(df_category, index=False, header=True):
        ws.append(r)


# 保存工作簿
output_file = 'D:/data/aa.xlsx'
wb.save(output_file)

2. Excel合并多个工作表

需求:

将同一个工作簿下多个工作表根合并为一个工作表。

操作:

仅需将 下述代码中的 文件路径 替换你自己的即可

代码:

#  导入所需要的模块,没有就去终端安装 pip install pandas
import pandas as pd

# 读取 Excel 文件中的多个工作表
file_path = 'D:/data/各省订单.xlsx'
xl = pd.ExcelFile(file_path)
dfs = {sheet_name: xl.parse(sheet_name) for sheet_name in xl.sheet_names}

# 合并多个工作表数据为一个 DataFrame
combined_data = pd.concat(dfs.values(), ignore_index=True)

# 将合并后的数据保存到新的 Excel 文件
output_file = 'D:/data/全国_data.xlsx'
combined_data.to_excel(output_file, index=False)

3. EXCEL拆分成多个工作薄

需求:

根据 “省份” 列的不同值将数据拆分为多个工作簿。

操作:

仅需将 下述代码中的 文件路径、拆分字段名 替换你自己的即可

代码:

# 导入所需要的模块,没有就去终端安装 pip install pandas
import pandas as pd

# 读取原始 Excel 文件
file_path = 'D:/data/全国订单.xlsx'
df = pd.read_excel(file_path)
df.head()


# 根据列内容拆分成多个工作簿
for category in df['省份'].unique():
    df_category = df[df['省份'] == category]
    new_file_path = f'D:/data/{category}.xlsx'  # 新文件名
    df_category.to_excel(new_file_path, index=False)

4. Excel合并多个工作簿

需求:

将固定文件夹下的所有各省份数据,汇总成全国的订单表;

操作:

仅需将 下述代码中的 文件路径 替换你自己的即可;

代码:

# 导入所需要的模块,没有就去终端安装 pip install pandas/os
import os
import pandas as pd

# 读取原始文件路径
folder_path = 'D:/data/'


# 读取文件夹下所有 Excel 文件并合并
all_data = pd.DataFrame()
for file in os.listdir(folder_path):
    if file.endswith('.xlsx'):
        file_path = os.path.join(folder_path, file)
        df = pd.read_excel(file_path)
        all_data = pd.concat([all_data, df], ignore_index=True)


# 将合并后的数据保存到新的 Excel 文件
output_file = 'D:/data/全国订单.xlsx'
all_data.to_excel(output_file, index=False)

总结

仅需替换 代码中的 路径字段名 即可轻松实现Excel合并/拆分多个工作表/簿,是不是超级简单呢?快点收藏起来吧。

  • 21
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个比较复杂的任务,我会尽力解答。首先,我们需要用到Python的`openpyxl`库来读取和写入Excel文件。然后,我们可以用面向对象的方式来组织代码,将Excel文件的每一行数据都封装成一个对象。最后,我们可以在程序中使用正则达式来识别单元格字段的颜色并提取备注信息。下面是一个示例代码: ```python import openpyxl import re class ExcelRow: def __init__(self, func_point, desc, dev_time, remark): self.func_point = func_point self.desc = desc self.dev_time = dev_time self.remark = remark class ExcelProcessor: def __init__(self, filename): self.filename = filename self.workbook = openpyxl.load_workbook(filename) self.sheet = self.workbook.active def read_excel(self): rows = [] for row in self.sheet.iter_rows(min_row=2, values_only=True): func_point, desc, dev_time, remark = row rows.append(ExcelRow(func_point, desc, dev_time, remark)) return rows def write_excel(self, rows): new_workbook = openpyxl.Workbook() new_sheet = new_workbook.active new_sheet.append(['功能点', '描述', '开发时间', '备注']) for row in rows: new_sheet.append([row.func_point, row.desc, row.dev_time, row.remark]) new_workbook.save(f'merged_{self.filename}') def extract_remark(self, cell): # 正则达式匹配备注信息 pattern = r'<font\s+color="blue">(.+?)</font>' match = re.search(pattern, cell.comment.text) if match: return match.group(1) else: return '' def process_excel(self): rows = self.read_excel() for row in rows: # 识别单元格颜色并提取备注信息 if row.remark is not None: for cell in self.sheet[row.remark].merged_cells: for coord in cell.coord: cell_obj = self.sheet[coord] if cell_obj.fill.start_color.index == 'FF00B0F0': row.remark = self.extract_remark(cell_obj) break self.write_excel(rows) ``` 使用上述代码,我们可以先创建一个`ExcelProcessor`对象,并调用其`process_excel`方法来处理Excel文件。该方法会读取Excel文件的每一行数据,并在处理过程中识别单元格颜色并提取备注信息。最终,该方法会生成一个新的Excel文件,其中包含了处理后的数据。 注意,上述代码中的正则达式只是一个示例,具体的匹配规则需要根据实际情况进行调整。另外,该代码只处理了单个工作的数据,如果需要处理多个工作,需要进行相应的修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值