【问题标题】:check duplicates value and input value with python openpyxl使用 python openpyxl 检查重复值和输入值
【发布时间】:2021-10-01 04:30:13
【问题描述】:

我想检查 excel 文件中的重复值和输入值。 excel文件的内容每天都在变化,所以不知道最后一行是哪一行。

excel文件的图像是我想要做的输出。图像如下。在此处输入图片说明

在excel文件图片中,如果'B'单元格的值是重复的,则需要输入一次运费'3,000',否则输入'3,000'

这是我已经完成的代码。在这种情况下,[Q5:Q max row] 的每一列都是 '3,000' 如果您有任何想法,请告诉我。

wb = load_workbook(merged_excel_file)
ws = wb.active

last_row = ws.max_row

for o in range(5, last_row+1):
Name_file = ws.cell(row=o, column=2).value

if Name_file.count(ws.cell(row=o, column=2).value) == 1:
    ws.cell(row=o, column=17).value = '3000'

else:
    continue

【问题讨论】:

  • 我不完全清楚您要做什么。是否对于第 2 列中重复的任何值,您将在同一行的第 17 列写入“3,000”?现在,对于每个 o,您为 Name_file 提供一个值,然后检查同一个单元格是否具有相同的值(确实如此,您没有更改任何内容,包括 o 的值 - 没有第二个循环),然后根据定义将“3000”输入到第 17 列中的每一行。
  • 我解决了如下问题。对于范围内的 o(5, last_row + 1): ws.cell(row=o, column=17).value = f"=if(countif($B$5:B{o},B{o}) = 1 ,3000,"'0'")"
  • 我以为已经解决了,但是excel文件只显示excel公式,而不是单元格值。我是 python 的大佬,所以我不明白如何制作第二个循环。你能告诉我这样做的例子吗?

标签: python excel count duplicates openpyxl


【解决方案1】:

为了避免在同一单元格上进行多个循环,这比较慢,您可以将它们的值存储在一个数组中。

wb = load_workbook(merged_excel_file)
ws = wb.active

last_row = ws.max_row
names = []
for o in range(5, last_row+1):
    names.append(ws.cell(row=o, column=2).value)

然后,您可以使用enumerate() 循环遍历数组中的每个值,这同样只需要从内存中访问数组,而不是再次循环遍历单元格:

for o, name in names:
    if names.count(name) == 1:
        ws.cell(row = o, column = 17).value = 3_000

由于您处理的是数字,我已将单元格更改为写入整数而不是字符串(下划线没有任何作用,它只是一个视觉分隔符,就像您写入“3,000”时一样)。

注意:Python 会根据缩进自动结束 if 循环,因此您不需要 else: continue 语句!不过要注意缩进。如果循环内有某些内容,例如上面的for 循环,则它应该比for 语句缩进一个制表符。这包括您的Name_file 分配和if 语句。

现在应该可以了。如果您想开始使用数据表做更高级的事情,pandas 是您了解更多信息的黄金标准库。

【讨论】:

    猜你喜欢
    • 2014-11-05
    • 1970-01-01
    • 2017-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-04
    • 1970-01-01
    • 2018-09-05
    相关资源
    最近更新 更多