Как изменить функцию копирования данных из объединенной ячейки openpyxl?

Здравствуйте, есть задача найти все объединенные ячейки, разъединить их, а затем в диапазон их объединения скопировать значение.
Пользуюсь библиотекой Openpyxl, есть худо-бедно работающий скрипт. Мне он не нравится, как я могу его изменить?

import openpyxl

book = openpyxl.open(f"{SCHEDULE_DIR}/{file_name}", data_only=True, read_only=False)
sheet = book.active

def prepare_sheet(sheet) -> NoReturn:
    merged_cells = list(map(str, sheet.merged_cells.ranges))  # Получаю список объединенных диапазонов
    # Разъединяю объединенные ячейки и дублирую запись
    for item in merged_cells:
        sheet.unmerge_cells(item)
        merged_cells_range = item.split(":")
        if merged_cells_range[0][0] == merged_cells_range[1][0]:
            letter = item.split(":").pop(0)[0]  # Символ столбца диапазона
            start = int(item.split(":").pop(0)[1:])  # Начало диапазона
            end = int(item.split(":").pop()[1:])  # Конец диапазона

            copy_cell = sheet[(letter + str(start))].value
            for n in range(start, end + 1):
                cell = letter + str(n)
                sheet[cell].value = copy_cell
  • Вопрос задан
  • 78 просмотров
Решения вопроса 1
s0lgryn
@s0lgryn Автор вопроса
Нашел и адаптировал решение из интернетов.
from openpyxl.utils import range_boundaries

def unmerge_and_fill_cells(sheet: Worksheet) -> NoReturn:
    for group in list(sheet.merged_cells.ranges):
        min_col, min_row, max_col, max_row = range_boundaries(str(group))
        top_left_cell_value = sheet.cell(row=min_row, column=min_col).value

        sheet.unmerge_cells(str(group))

        for row in sheet.iter_rows(min_col=min_col, min_row=min_row, max_col=max_col, max_row=max_row):
            for cell in row:
                cell.value = top_left_cell_value
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы