例如:我要将包含“263218”的单元格标记
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 导入模块 openpyxl
import openpyxl
from openpyxl.styles import PatternFill
from openpyxl.styles import colors
from openpyxl.styles import Font, Color
import copy
# 读取excel文件
# 括号中的字符串为你要比较的两个excel的路径,注意用“/”
wb_a = openpyxl.load_workbook('D:/DB/G4.xlsx')
wb_b = openpyxl.load_workbook('D:/DB/DX.xlsx')
# 定义一个方法来获取表格中某一列的内容,返回一个列表
# 将每一列输出为一个列表(temp表示列的名字)
def getIP(wb, temp):
sheet = wb.active
ip = []
for cellobj in sheet[temp]:
ip.append(cellobj.value)
return ip
# 想比较哪几列就输入那几列的名称
list1 = ['E']
list2 = [] # 用于存每列不同的值
differ1 = {} # 第一个文件中每列不同的列表组成字典
differ2 = {} # 第二个文件中每列不同的列表组成字典
for temp1 in list1:
# 获得ip列表
ip_a = getIP(wb_a, temp1)
ip_b = getIP(wb_b, temp1)
# 将两个列表转换成集合
aa = set(ip_a)
bb = set(ip_b)
# 找出两个列表的不同行,并转换成列表
# difference = str(aa) in str(bb)
# union_aa_bb = set(aa).union(bb)
intersection_aa_bb = set(aa).intersection(set(bb))
# 打印出列表中的元素
# 到这一步,两个表格中不同的数据已经被找出来了
# 将不同行高亮显示
# print ("开始第一张表" + "----" *10)
del list2[0:]
a = wb_a.active[temp1]
for cellobj in a:
if cellobj.value in intersection_aa_bb:
cellobj.fill = PatternFill("solid", fgColor="DD232B")
list2.append(cellobj.value)
if list2 != []:
differ1[temp1] = copy.deepcopy(list2)
# print ("开始第二张表" + "----" *10)
del list2[0:]
b = wb_b.active[temp1]
for cellobj in b:
if cellobj.value in intersection_aa_bb:
cellobj.fill = PatternFill("solid", fgColor="DD232B")
list2.append(cellobj.value)
if list2 != []:
differ2[temp1] = copy.deepcopy(list2)
print(differ1.items())
print(differ2.items())
wb_a.save('D:/DB/G4.xlsx')
wb_b.save('D:/DB/DX.xlsx')
用什么方法能匹配到呢
cellobj.value本身含有多行文本,你先split('\n')之后循环比对,或者转set之后做集合与运算(这样效率更高而且不用循环)
# 获取第column列的值,返回该列的平均值
def list_col_value(sheet, column, length):
col_count = 0
for i in range(1, length + 1):
cell_value = sheet.cell(i, column).value
col_count += int(cell_value)
return col_count/length
在这种情况下,你可以使用 Python 的正则表达式模块 re 来匹配多个需求 ID。
例如,假设你有一个单元格,内容如下:
cell = "需求ID: 123, 456, 789"
你可以使用如下代码来匹配所有需求 ID:
import re
匹配所有数字,并将它们保存到一个列表中
ids = re.findall(r'\d+', cell)
输出 ['123', '456', '789']
print(ids)
然后,你就可以遍历列表中的每个 ID,并根据需要对单元格进行标记。