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 раз, что будет номером счета). Итак, последнее, если номер счета не совпадает с номером счета, он будет окрашивать счет в красный цвет, если он совпадает с цветом в зеленый цвет.
=ИДЕЯ= Чтобы подтвердить дублированные счета и разделить их друг от друга, когда пользователь вводит номера счетов, он может проверить координаты ячейки и попытаться сопоставить их со строками повторяющихся значений, и если оба находятся в одной строке, они совпадают и подтверждаются.
С текущим кодом это станет несколько сложным, поскольку вы можете не знать, встречается ли значение счета более одного раза в столбце, до полной итерации по заданному диапазону. Я предполагаю, что вам нужно будет сохранить каждое совпадение 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