Python, как добавить инкрементный суффикс к повторяющимся значениям ячеек Excel

#python-3.x #openpyxl

#python-3.x #openpyxl

Вопрос:

Я новичок в Python.Нужна помощь для обновления значений ячеек Excel. Попытка добавить добавочный суффикс с повторяющимися значениями или значениями существует более одного раза в таблице Excel.

Используя OpenPyxl, попробовал, как показано ниже, но работает не так, как ожидалось .. на самом деле моя цель — добавить добавочный суффикс к значениям ячеек, если значение ячейки существует более одного раза.

Мой пример кода:

 for cell in ws.columns[0]:
    if cell.value=='setoff':
        for i in range(0,2):
           cell.value = '{}_{}'.format(cell.value, i)
wb.save('OP_1.xlsx')
 

Мой код не различает дубликаты, а добавляет их как дубликаты.

Пожалуйста, руководство.

Фактические значения электронной таблицы:

Фактические значения электронной таблицы Ожидаемые обновления / изменения:

Ожидаемые изменения

Ответ №1:

Ваш код должен подсчитывать, как часто значение ячейки уже просматривалось, чтобы добавить правильный суффикс. Вот решение, использующее встроенный Counter класс Python:

 from collections import Counter

c = Counter()
for cell in ws.columns[0]:
    if c[cell.value]>0:
        cell.value = '{}_{}'.format(cell.value, c[cell.value])
    c[cell.value] =1
wb.save('OP_1.xlsx')
 

Комментарии:

1. Спасибо, Коринна!! это работает, но третий набор не обновляется. я имею в виду, что 2-й и 3-й наборы обновляются как одинаковые с суффиксом ‘_1’. Ожидается, что 3-й набор должен быть обновлен на ‘_2’.

2. Также я пытаюсь получить значения ячеек на основе заголовков, выделенных желтым цветом. например, «если cell.value = m_terms, если print (setoff) — результатом должно быть соответствующее значение ячейки ‘Y’. как нам этого добиться?

3. Я думаю, что в моем коде нет ошибки. Вы уверены, что написали c[cell.value] =1 вместо c[cell.value]=1 ? Ваша попытка получить значения ячеек на основе выделенных заголовков выходит за рамки вашего первоначального вопроса, возможно, вам следует открыть новый.

4. ДА. Ошибка не выдается, но не обновляется 3-й набор. В любом случае, спасибо за ваш вклад.