利用Python3.8 Openpyxl库拆分Excel表格

本文将介绍如何使用Python3.8的openpyxl库拆分Excel表格。您将学习如何根据指定列的内容将一个Excel表格拆分为多个表格,每个表格包含原始表格中该列具有相同值的所有行。此外,代码还将保留原始表格的格式,并将每个新表格保存为独立的Excel文件。

代码示例

以下是使用Python3.8版本openpyxl库拆分表格的代码:

import os
from openpyxl import Workbook, load_workbook
from openpyxl.utils import get_column_letter
from openpyxl.styles import NamedStyle

# 设置工作表冻结窗格A1行的内容的样式
def set_freeze_panes(ws):
    ws.freeze_panes = ws['A2']
    ws.freeze_panes = ws.freeze_panes.freeze_panes

# 获取单元格名称为表头的单元格所在列的列号
def get_header_col(ws, header):
    for col in range(1, ws.max_column + 1):
        if ws.cell(row=1, column=col).value == header:
            return col
    return None

# 拆分表格并生成新的工作表
def split_workbook(filename, header):
    # 加载原始工作表
    wb = load_workbook(filename)
    ws = wb.active

    # 设置工作表冻结窗格A1行的内容的样式
    set_freeze_panes(ws)

    # 获取单元格名称为表头的单元格所在列的列号
    col = get_header_col(ws, header)
    if col is None:
        return

    # 创建新的工作表
    style = NamedStyle(name='original')
    for row in range(2, ws.max_row + 1):
        cell_value = ws.cell(row=row, column=col).value
        if cell_value is None:
            continue
        if cell_value not in wb.sheetnames:
            wb.create_sheet(cell_value)
            wb[cell_value].append(ws[1])
            wb[cell_value].row_dimensions[1] = ws.row_dimensions[1]
            for c in range(1, ws.max_column + 1):
                wb[cell_value].cell(row=1, column=c).style = style
        wb[cell_value].append(ws[row])
        wb[cell_value].row_dimensions[row] = ws.row_dimensions[row]
        for c in range(1, ws.max_column + 1):
            wb[cell_value].cell(row=row, column=c).style = style

    # 保存拆分后的工作表到新的excel文件中
    folder_path = os.path.join(os.path.expanduser('~'), 'Desktop', 'Split_Workbook')
    if not os.path.exists(folder_path):
        os.mkdir(folder_path)
    for sheetname in wb.sheetnames:
        if sheetname == ws.title:
            continue
        new_filename = os.path.join(folder_path, sheetname + '.xlsx')
        new_wb = Workbook()
        new_ws = new_wb.active
        new_ws.title = sheetname
        for row in wb[sheetname].rows:
            new_ws.append(row)
        set_freeze_panes(new_ws)
        new_wb.save(new_filename)

# 测试
if __name__ == '__main__':
    filename = 'example.xlsx'
    header = 'Category'
    split_workbook(filename, header)

代码说明

  1. 导入必要的库: 首先,我们需要导入 os, Workbook, load_workbook, get_column_letter, NamedStyle 等库。
  2. 定义 set_freeze_panes 函数: 该函数用于设置工作表冻结窗格,冻结A1单元格,方便查看数据。
  3. 定义 get_header_col 函数: 该函数用于获取指定表头所在的列号。
  4. 定义 split_workbook 函数: 这是核心函数,负责拆分表格。
    • 首先,加载原始Excel文件和工作表。
    • 设置冻结窗格。
    • 获取指定表头所在的列号。
    • 遍历数据行,根据指定列的值创建新的工作表,并将对应数据复制到新工作表中。
    • 保留原始格式。
    • 将每个新工作表保存为独立的Excel文件到指定文件夹。
  5. 测试代码: 设置要拆分的Excel文件名和表头,调用 split_workbook 函数执行拆分操作。

总结

通过以上代码,您可以轻松地使用Python3.8和openpyxl库拆分Excel表格。根据您的实际需求,修改文件名、表头等参数即可。


原文地址: https://www.cveoy.top/t/topic/fW8C 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录