当前位置: 首页 > 知识库问答 >
问题:

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

马阳曦
2023-03-14

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

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

我已经获得了创建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个答案

张淳
2023-03-14

如果工作表[“A2”]中的“红色”或“红色”.value:始终被视为 True,因为非空字符串被视为 True。所以实际上它与工作表['A2'].value中的True或“red”相同:

来自文档:

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

  • 定义为false的常量:无和False。
  • 任何数字类型的零:00.00jDecimal(0)分数(0,1)
  • 空序列和集合:"()[]{}set()范围(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,即“I've The Blues”中的'Blue'将被评估true

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

 类似资料:
  • 我的excel工作表中有两个单元格,其中一个单元格包含如下字符串: 而另一个单元格有欧元货币,例如: 现在我想复制这两个值,即“总额”和“223.463.687€”,并将其复制到第三个单元格中。我使用的公式是这样的: 我得到以下结果: 但是我应该: 注: 货币的格式是德语格式,意思是“.”(小数点)和“,”(昏迷)扮演相反的角色。在德语格式中,“,”是小数点,在英语中是“。”。

  • 在一个编码的UI测试中,我试图使用range.copy从excel复制一个动态范围,并通过ctrl+V将其粘贴到wpf网格中。

  • 有人能帮忙吗?我有一个现有代码,该代码当前根据V列中的单元格值(上诉记录)将整行数据从一张表(质量日志)复制到另一张表(上诉日志)。 之前,它已经从原始(质量日志)表中删除了该行,但我现在希望更改代码,以便将单元格值更改为(正在上诉),然后将其移动到下一页(上诉日志)。 请参阅下面我的代码。我已用**表示我试图更改代码

  • 随着数据量和单个文件的增加,我开始遇到更多的内存问题。因此,我的问题是:复制/粘贴这些表的最有效的内存和速度方法是什么? > (...).specialcells(xlCellTypeVisible)。复制目标:=(...)-我还没有找到包含XLValues参数的方法(我想最大限度地减少复制格式化所占用的资源,因为没有公式) 将定义的范围用于复制/粘贴目的(使用xlCellTypeVisible参

  • 我有一个对象列表,我试图为每个对象指定三行,我使用的"Office Open Xml库"有以下例程: 然而,它弹出一个错误,说不能合并已经合并的单元格。 所以问题是如何在Excel中合并两个以上的单元格?