
作品名称:轻松找出两份表格间的细微差别
用到的库:openpyxl、copy
openpyxl库来比较两个Excel文件中指定工作表的内容,并在一个新的工作簿中高亮显示差异。


实现过程
一、代码设计
导入必要的库:
load_workbook和Workbook:用于加载和创建Excel工作簿。PatternFill:用于设置单元格的填充样式。copy:用于复制对象,这里用于复制单元格样式。定义两种颜色填充模式:
red_fill:浅红色填充,用于高亮显示不同之处。green_fill:浅绿色填充,用于显示第二个文件中不同的数据。定义highlight_diff函数,该函数接收以下参数:
file_path_1和file_path_2:两个Excel文件的路径。sheet_name:要比较的工作表名称。output_path:输出文件的路径。加载两个Excel文件,并获取指定的工作表。
创建一个新的工作簿,并设置活动工作表的标题为"Comparison"。
复制第一个Excel文件的格式到新工作簿:
比较两个Excel文件的数据,并在新文件中标记差异:
添加标题行以标识第二组数据来自哪个文件。
保存新工作簿到指定的输出路径。
设置两个Excel文件的路径和输出文件的路径,并调用highlight_diff函数执行比较和高亮显示差异的操作。
打印处理完成的消息和输出文件的路径。
from openpyxl import load_workbook, Workbookfrom openpyxl.styles import PatternFillfromcopy import copy# 定义颜色填充模式用于高亮显示red_fill = PatternFill(start_color="FFCCCB", end_color="FFCCCB", fill_type="solid") # 浅红色green_fill = PatternFill(start_color="90EE90", end_color="90EE90", fill_type="solid") # 浅绿色def highlight_diff(file_path_1, file_path_2, sheet_name, output_path):# 加载原始Excel文件wb1 = load_workbook(filename=file_path_1)wb2 = load_workbook(filename=file_path_2)ws1 = wb1[sheet_name]ws2 = wb2[sheet_name]# 创建一个新的工作簿以保存结果wb_output = Workbook()ws_output = wb_output.activews_output.title = "Comparison"# 复制第一个Excel文件的格式到新文件forrowin ws1.iter_rows(values_only=False):for cell inrow:new_cell = ws_output.cell(row=cell.row, column=cell.column, value=cell.value)if cell.has_style:new_cell.font =copy(cell.font)new_cell.border =copy(cell.border)new_cell.fill =copy(cell.fill)new_cell.number_format =copy(cell.number_format)new_cell.protection =copy(cell.protection)new_cell.alignment =copy(cell.alignment)# 比较两个Excel文件,并在新文件中标记差异forrowinrange(1, ws1.max_row +1):for col inrange(1, ws1.max_column +1):cell1_value = ws1.cell(row=row, column=col).valuecell2_value = ws2.cell(row=row, column=col).value# 如果值不同,则高亮显示if cell1_value != cell2_value:ws_output.cell(row=row, column=col).fill = red_fill# 同时写入第二个表格的数据到相邻的列,并高亮显示ws_output.cell(row=row, column=col + ws1.max_column).value= cell2_valuews_output.cell(row=row, column=col + ws1.max_column).fill = green_fill# 添加标题行以标识第二组数据来自哪个文件for col inrange(1, ws1.max_column +1):ws_output.cell(row=1, column=col + ws1.max_column, value=f"file2: {ws1.cell(row=1, column=col).value}")# 保存新工作簿wb_output.save(output_path)# 读取两个Excel文件file_path_1 ='file1.xlsx'file_path_2 ='file2.xlsx'# 比较并高亮显示差异output_file_path ='highlighted_diff.xlsx'highlight_diff(file_path_1, file_path_2, '汇总表', output_file_path)print("处理完成,已保存到:", output_file_path)
二、结语
以上就是本次分享的全部内容,如果你有任何疑问或想要分享你的自动化办公经验,我们的评论区永远为你敞开。你的每一个点赞和转发,都是对我们最大的支持和鼓励!
想要深入学习并获取文中的完整代码吗?很简单,关注我们的公众号,并回复文章标题,即可立即获取。
再次感谢你的阅读,期待在下一次分享中与你相见!
精选阅读
python自动化系列:将Excel表格中的学生信息自动填充到一个word文档