首页 > 解决方案 > 如何从 Excel 单元格中复制一个值并将其粘贴到一个新的单元格中

问题描述

我正在尝试创建将在单元格中搜索诸如“蓝色”之类的颜色值的代码,如果在该单元格中找到它,则将该值粘贴到另一个单元格中,然后对几百种颜色的范围重复此操作。

一旦发生这种情况,对列中的下一个单元格再次执行相同的过程,并粘贴到相应行中的另一个单元格中,直到每个填充的单元格都被搜索到所有颜色值。

我有创建 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 语句结果。

标签: excelpython-3.xopenpyxl

解决方案


if 'Red' or 'red' in sheet['A2'].value:总是被考虑True,因为非空字符串被考虑True。所以实际上它是一样的if True or 'red' in sheet['A2'].value:

从文档

默认情况下,一个对象被认为是真,除非它的类定义了一个__bool__()返回 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

编辑:由于评论中的讨论,我将评估替换为考虑。


推荐阅读