如何从Excel单元格复制值并将其按比例粘贴到新单元格中

时间:2018-12-21 21:06:22

标签: excel python-3.x openpyxl

我正在尝试创建代码,以在一个单元格中搜索颜色值(例如“蓝色”),如果在该单元格中找到了该值,则将该值粘贴到另一个单元格中,并重复几次一百种颜色。

一旦发生这种情况,请对该列中的下一个单元格再次执行相同的过程,然后粘贴到相应行中的另一个单元格中,直到在每个填充的单元格中搜索了所有颜色值为止。

我已经有了创建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 :(得分:0)

始终将

if 'Red' or 'red' in sheet['A2'].value:视为True,因为将非空字符串视为True。 所以实际上它与if True or 'red' in sheet['A2'].value:

From the docs

  

默认情况下,除非对象被其对象定义,否则其对象的类定义了返回False的__bool__()方法或返回零的__len__()方法。 1以下是被认为是错误的大多数内置对象:

     
      
  • 定义为false的常量:“无”和“ False”。
  •   
  • 任何数字类型的零:00.00jDecimal(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

编辑:由于评论中的讨论,我用考虑取代了评估。