Openpyxl, как проверить, дублируется ли ввод в столбце и проверить?

import openpyxl
from openpyxl.styles import PatternFill
from openpyxl import workbook

wrong_fill_pattern = PatternFill(patternType='solid', fgColor='FF0000')
right_fill_pattern = PatternFill(patternType='solid', fgColor='008000')
starting = (input("Bill Starting Row `A1` : "))
ending = (input("Bill Ending Row `A20`  : "))
wb = openpyxl.load_workbook('test.xlsx')
s = wb["Sheet1"]
billtocheck = input("Enter Bills : ")

billist = [float(item) for item in billtocheck.split(' ')]
for j in s[f'{starting}':f'{ending}']:
    for cel in j:
        for billtocheck in billist:

            if cel.value == billtocheck:
                print(cel.coordinate, cel.value)
                rightcoordinate = cel.coordinate
                s[f'{rightcoordinate}'].fill = right_fill_pattern
                print('+')

                wb.save("TEST2.xlsx")
                break
            if cel.value != billtocheck:
                wrongcoordinate = cel.coordinate
                s[f'{wrongcoordinate}'].fill = wrong_fill_pattern
                print("-")

    print('-------------')
wb.save("TEST2.xlsx")

Этот код является своего рода программой проверки счетов. В этом коде пользователь вводит начальную и конечную точки столбца и строки, и в этом диапазоне столбцов и строк я хотел найти счета, и если значение существует, оно просто заполняет фон зеленым, если не красным, он работает нормально, но у меня есть другая проблема иногда счет существует несколько раз, и я хочу, чтобы они проверялись по номеру счета в другой строке. Пример файла, над которым я работаю, как вы можете видеть в этом файле Excel, счета расположены в столбце E, а номер счета расположен в столбце H, поэтому, как я говорю, я просто хочу проверить, содержит ли столбец E одно и то же значение несколько раз, я просто хочу, чтобы эти несколько значений поместили пользователя в подтверждение раздел, чтобы получить ввод, который будет первым, где номера счетов расположены в столбце и диапазоне строк, например от H1 до H20, и получить несколько входов, которые будут номерами счетов (если есть 3 раза 64,04 и 2 раза 52,02 программа попросит пользователя ввести 5 раз, что будет номером счета). Итак, последнее, если номер счета не совпадает с номером счета, он будет окрашивать счет в красный цвет, если он совпадает с цветом в зеленый цвет.

=ИДЕЯ= Чтобы подтвердить дублированные счета и разделить их друг от друга, когда пользователь вводит номера счетов, он может проверить координаты ячейки и попытаться сопоставить их со строками повторяющихся значений, и если оба находятся в одной строке, они совпадают и подтверждаются.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
46
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

С текущим кодом это станет несколько сложным, поскольку вы можете не знать, встречается ли значение счета более одного раза в столбце, до полной итерации по заданному диапазону. Я предполагаю, что вам нужно будет сохранить каждое совпадение Bill Value в списке, а затем проверить, содержит ли список более одного элемента. Если это не так, вы можете просто покрасить ячейку в зеленый цвет и перейти к следующему значению счета. Если это так, то запросите диапазон ячеек номера счета и номера счета для проверки. Вам придется перебирать совпадающие значения, чтобы вы могли получить соответствующий номер счета для каждой совпадающей ячейки, а затем проверить, соответствует ли он введенным номерам счета, и если они соответствуют, то сделать фон зеленым.

Если вы не знакомы, я думаю, вам было бы полезно узнать о списках и словарях, это значительно облегчит задачу.

Пожалуйста, проверьте свой первоначальный вопрос, я дал альтернативный способ добиться того, что вы пытались сделать в то время. Этот код использует словари и списки и значительно упростит добавление этой дополнительной проверки.

Например, found_list немедленно определит, есть ли более одного совпадения для вашей Стоимости счета.

found_list = [key for key, value in range_dict.items() if value == btc]
if len(found_list) > 1:
    

Вы можете получить диапазон и значения номеров счетов, а затем запустить один цикл, проверяя значения счетов из found_list с номером счета по сравнению с введенными пользователем.

Я ожидаю также, что вам понадобится только буква / номер столбца для номера счета, а не диапазон ячеек. На вашем примере листа номер счета — это та же строка, что и значение, поэтому вам просто нужно получить значение из правильной ячейки, соответствующей значению счета, которое вы проверяете в то время.

мы можем связаться друг с другом по разногласиям, пожалуйста? Хатибоглуозгур#8993

Mehmet Özgür Hatiboğlu 22.03.2022 15:12

Другие вопросы по теме