Объединение ячеек с уникальными значениями

необходимо через библиотеку xlwings в питоне объединить значения в столбце A, которые одинаковы Изображение файла Excel

пытаюсь это сделать при помощи этих строк кода:

range_to_merge=ws.range("A3:K100")
    znac=list(set(range_to_merge.value))
    for value in znac:
        obed=ws.range(f'A3:A50')
        obed.merge()

Но код делает не то,что нужно, не могли бы Вы подсказать вариант решения данной проблемы?


Ответы (1 шт):

Автор решения: Алексей Р

Лучше не пользоваться объединенными ячейками - с ними потом очень неудобно работать - сортировать, фильтровать, копировать...
По сути решения - бесконечный цикл с выходом при нахождении первой пустой ячейки. Внутри 2 указателя и переменная с предыдущим запомненным значением. Если значение очередной ячейки отличается от предыдущего запомненного, то объединяем ячейки от старта до текущей-1, запоминаем новое значение, старт переносим на текущую ячейку и бежим дальше.

import xlwings as xw

wb_path, sheet_name, start_row, column = r'c:\test\test_xlwings_merge.xlsx', 'Лист1', 3, 'A'

with xw.App(visible=False) as app:
    wb = app.books.open(wb_path)
    sheet = wb.sheets[sheet_name]
    row = start_row
    group = sheet[f'{column}{row}']
    while True:
        v = sheet[f'{column}{row}'].value
        if group != v:
            if row - start_row > 1:
                sheet[f'{column}{start_row}:{column}{row - 1}'].merge()
            group = v
            start_row = row
        row += 1
        if v is None:
            break
    wb.save()
    wb.close()
→ Ссылка