Openpyxlでスタイルをコピーしたい

import openpyxl
from copy import copy

# Stylyのコピー設定

# コピー元のExcelファイルを開く
wb = openpyxl.load_workbook('sample.xlsx')
# コピー先のExcelファイルを開く
dst_wb = openpyxl.load_workbook('sample2.xlsx')
dst_sheet = dst_wb.active
sheet = wb.active

for row in sheet:
    for cell in row:
        # コピー先のセルにコピー元のセルのスタイルをコピー
        new_cell = dst_sheet.cell(row=cell.row, column=cell.column, value=cell.value)
        new_cell.font = copy(cell.font)
        new_cell.border = copy(cell.border)
        new_cell.fill = copy(cell.fill)
        new_cell.number_format = copy(cell.number_format)
        new_cell.alignment = copy(cell.alignment)
        
        for column_width in range(1, sheet.max_column+1):
            dst_sheet.column_dimensions[openpyxl.utils.get_column_letter(column_width)].width = sheet.column_dimensions[openpyxl.utils.get_column_letter(column_width)].width
        
        for row_height in range(1, sheet.max_row+1):
            dst_sheet.row_dimensions[row_height].height = sheet.row_dimensions[row_height].height
        
        # グループ化されている設定のコピー
        # 列
        if cell.column in sheet.column_dimensions:
            dst_sheet.column_dimensions[cell.column].outlineLevel = sheet.column_dimensions[cell.column].outlineLevel
            dst_sheet.column_dimensions[cell.column].hidden = sheet.column_dimensions[cell.column].hidden
            dst_sheet.column_dimensions[cell.column].collapsed = sheet.column_dimensions[cell.column].collapsed
        # 行
        if cell.row in sheet.row_dimensions:
            dst_sheet.row_dimensions[cell.row].outlineLevel = sheet.row_dimensions[cell.row].outlineLevel
            dst_sheet.row_dimensions[cell.row].hidden = sheet.row_dimensions[cell.row].hidden
            dst_sheet.row_dimensions[cell.row].collapsed = sheet.row_dimensions[cell.row].collapsed

        # 結合されているセルの設定のコピー
        for merged_cell in sheet.merged_cells.ranges:    
            dst_sheet.merge_cells(range_strings=merged_cell.coord)


グループ化もコピーできるのは驚いた。

さらに折りたたまれているかそうでないかも把握できたとは

セル結合もmerged_cells.rangesで結合されているセルの情報が一気に取れて便利。

この記事が気に入ったらサポートをしてみませんか?