Как скопировать значение из ячейки Excel и вставить его в новую ячейку в масштабе - PullRequest
0 голосов
/ 22 декабря 2018

Я пытаюсь создать код, который будет искать значение цвета, например «синий» в ячейке, и, если оно найдено в этой ячейке, вставить это значение в другую ячейку и повторить это для диапазона парысто цветов.

Как только это произойдет, выполните тот же процесс снова для следующей ячейки внизу столбца и вставьте ее в другую ячейку в соответствующей строке, пока в каждой заполненной ячейке не будут найдены все значения цвета.

У меня есть код для создания листа Excel, который будет извлекать несколько предопределенных значений, но я не уверен, как расширить код, включив в него сотни различных цветов.

#Excel Project to fill attributes quickly.

#Importing Modules
import os, openpyxl

#defining variables
wb = openpyxl.Workbook()
sheet = wb['Sheet']

#Asking for your category
x = input('What is your category?')



#Writing header
sheet['A1'] = 'Short Description'
sheet['B1'] = 'Long Description'
sheet['C1'] = 'Item'
sheet['J1'] = 'Color'

#writing attribute values
sheet['A2'] = 'Amazing blue shiny fantastic shirt ee-9003'
sheet['A3'] = 'Red dull jacket'

#Writing values for "Color"

if 'Red' or 'red' in sheet['A2'].value:
    sheet['J2'] = 'Red'
elif 'Orange' or 'orange' in sheet['A2'].value:
    sheet['J2'] = 'Orange'
elif 'Blue' or 'blue' in sheet['A2'].value:
        sheet['J2'] = 'Blue'


if 'Red' or 'red' in sheet['A3'].value:
    sheet['J3'] = 'Red'
elif 'Blue' or 'blue' in sheet['A3'].value:
    sheet['J3'] = 'Blue'


#Saving to your desktop
os.chdir(r'E:\Desktop')
wb.save('Attributes_filled_' + str(x) + '.xlsx')

Я ожидаю, что код покажет «синий» в первый раз и «красный» во второй раз для моего кода, но в зависимости от того, как я упорядочиваю код, я получаю первый результат оператора if.

1 Ответ

0 голосов
/ 22 декабря 2018

if 'Red' or 'red' in sheet['A2'].value: всегда считается True, поскольку непустые строки считаются True.Так что на самом деле это то же самое, что и if True or 'red' in sheet['A2'].value:

Из документов :

По умолчанию объект считается истинным, если его класс не определяет либо *Метод 1012 *, который возвращает False, или метод __len__(), который возвращает ноль при вызове с объектом. 1 Вот большинство встроенных объектов, которые считаются ложными:

  • константы, определенные как ложные: Нет и Ложь.
  • ноль любого числового типа:0, 0.0, 0j, Decimal(0), Fraction(0, 1)
  • пустых последовательностей и коллекций: '', (), [], {}, set(),range(0)

любой из следующих способов решит вашу проблему:

if 'red' in sheet['A3'].value.lower():

или

if 'Red' in sheet['A3'].value or 'red' in sheet['A3'].value:

или

if any(color in sheet['A3'].value for color in ('Red', 'red')):

То же самое относится ко всем вашим условиям if / elif.Также обратите внимание, что если строка является частью большей строки, она все равно вернет True, т.е. 'Blue" in "I've Got The Blues" будет оцениваться True

РЕДАКТИРОВАТЬ: из-за обсуждения в комментариях я заменяю оценку на рассмотренную.

...