使用python openpyxl检查重复值和输入值

2024-06-09 21:25:42 发布

您现在位置:Python中文网/ 问答频道 /正文

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

excel文件的图像是我要执行的输出。图像如下所示。在此处输入图像描述

enter image description here

在excel文件图像中,如果“B”单元格的值重复,则装运成本应一次性输入“3000”,否则输入“3000”

这就是我所做的代码。在这种情况下,[Q5:Q max row]的每一列都是“3000”,如果您有任何想法,请告诉我

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

Tags: 文件name图像内容wsvaluecellcolumn
1条回答
网友
1楼 · 发布于 2024-06-09 21:25:42

为了避免在同一单元格上出现多个循环(这相对较慢),可以将它们的值存储在一个数组中

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

因为您处理的是一个数字,所以我将单元格改为写整数而不是字符串(下划线没有任何作用,它只是一个可视分隔符,就像您写“3000”时一样)

注意:Python将根据缩进自动结束循环,因此不需要else: continue语句!不过一定要注意压痕。如果某个东西在循环中,比如上面的for循环,那么它应该比for语句缩进一个制表符。这包括Name_file赋值和if语句

这应该暂时有效。如果您想开始对数据表进行更高级的操作,pandas是您需要了解更多信息的黄金标准库

相关问题 更多 >