PYTHON - 复制整行并格式化

问题描述 投票:0回答:2

我是 Python 和 Openpyxl 的新手。 我正在尝试将一系列单元格(其格式知道某些单元格已合并)从同一工作表上的一行复制到另一行。

谢谢

python openpyxl
2个回答
1
投票

这是将同一工作表中的单元格从一行复制到另一行的示例。
此示例采用第 2 行上从 A 列到 J 列的一系列单元格,并向下复制到“row_offset”行,在本例中为第 12 行。复制包括单元格样式/格式和合并单元格。

from openpyxl.utils import rows_from_range
from openpyxl import load_workbook
from openpyxl.worksheet.cell_range import CellRange
from copy import copy


def copy_range(range_str, sheet, offset):
    """ Copy cell values and style to the new row using offset"""
    for row in rows_from_range(range_str):
        for cell in row:
            if sheet[cell].value is not None:  # Don't copy other cells in merged unit
                dst_cell = sheet[cell].offset(row=offset, column=0)
                src_cell = sheet[cell]

                ### Copy Cell value
                dst_cell.value = src_cell.value

                ### Copy Cell Styles
                dst_cell.font = copy(src_cell.font)
                dst_cell.alignment = copy(src_cell.alignment)
                dst_cell.border = copy(src_cell.border)
                dst_cell.fill = copy(src_cell.fill)

                dst_cell.number_format = src_cell.number_format


def get_merge_list(r_range, r_offset):
    """ Create a list of new cell merges from the existing row"""
    area = CellRange(r_range)  # Range to check for merged cells
    mlist = []  # List of merged cells on existing row offset to the new row
    for mc in ws.merged_cells:
        if mc.coord not in area:
            continue
        cr = CellRange(mc.coord)
        cr.shift(row_shift=r_offset)
        mlist.append(cr.coord)

    return mlist


wb = load_workbook("foo.xlsx")
ws = wb['Sheet1']

row_range = 'A2:J2'  # Row range to be copied
row_offset = 10  # Offset to the new row

### Create a range list for merged cells on new row
new_merge_list = get_merge_list(row_range, row_offset)
### Create merged cells on new row
for nm in new_merge_list:
    ws.merge_cells(nm)

### Copy cell values to new row
copy_range(row_range, ws, row_offset)

### Save workbook
wb.save("foo_out.xlsx")


0
投票

感谢分享。它似乎不适用于合并单元格上的边框

Snapshot

© www.soinside.com 2019 - 2024. All rights reserved.