python - 使用 python openpyxl 检查重复值和输入值
问题描述
我想检查 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
解决方案
为了避免在同一个单元格上进行多个循环,这比较慢,您可以将它们的值存储在一个数组中。
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 是您了解更多信息的黄金标准库。
推荐阅读
- vue.js - 是否可以根据父组件的道具在 extends: 属性中动态添加图表类型?
- bash - 如何从另一个 shell 脚本导入变量?
- sqlite - 如何使用 TCL 绑定编译 SQLite?
- python - 将图像中的椭圆转换为圆形(将椭圆变形为圆形,就像多边形变形为矩形)
- asp.net - 上传图片后如何删除图片?
- terraform - 我可以遍历 OPA 中对象的键和值以验证它们是否符合某种格式(CamelCase)
- java - java - 如何打包将jar文件分发到另一台计算机时将自动工作的java库?
- python - 如何使用 Python 脚本识别 abaqus 程序集中的节点集名称?
- angular - Angular 8 应用程序在 IE11 中不起作用,但在 Edge 中它工作正常,如何修复它,最近我将我的应用程序从 Angular 7 迁移到 8
- java - 在 Maven 依赖规范中包装 groupId 值