• По какой причине excel ругается на файл с объединенными ячейками, сформированный с Python OpenPyXL?

    @o5a
    Проблема в этом:
    sheet.merge_cells(start_row=start_row_index + 1, start_column=1, end_row=row_index + 1, end_column=1)

    При каждом повторении текста в 1-й колонке (Подразделение) будет повторяться объединение ячеек от начальной (где начался повторяющийся текст) до каждой новой строки, т.е. куча наслаивающихся объединений A2:A3, A2:A4 и т.д.
    Это Excel и не нравится. Объединение ячеек должно быть одно на всю группу ячеек, т.е. скажем тут только A2:A14.

    Так что измените код, чтобы объединяло не по каждому совпадению, а по окончанию повторяющегося блока, одно объединение на каждый повторяющийся блок.

    Можете или свой вариант проверки повторения видоизменить (только чтобы объединяло не более 1 раза на каждый блок повторений), или же просто в самом конце уже после построения всех ячеек согласно повторяющимся данным применить объединения на каждую из групп, например так:
    from itertools import groupby
    
        # из текущего кода убираем все merge_cells, а затем уже после цикла for row_index in ...
        # проходимся по всем повторениям (используем группировку groupby)
        idx = 2
        for k, g in groupby(temp[1:], key = lambda x: x[0]):
            # количество повторяющихся значений
            cnt = len(list(g))
            if cnt > 1:
                sheet.merge_cells(start_row=idx, start_column=1, end_row=idx+cnt-1, end_column=1)
            idx += cnt
    Ответ написан
    1 комментарий