首页 > 其他分享 >比对两个excel文件数据差异

比对两个excel文件数据差异

时间:2024-07-17 17:44:41浏览次数:12  
标签:文件 file1 差异 excel value cell ws col row

背景

工作中需要一个测试需求:需要比对两个excel文件的内容,以门店编码为唯一键,比对其他字段值不一致的地方,如有不一致需要写入另外一个文件


解决方案

使用python代码实现

# -*- coding: utf-8 -*-
"""
@File    : 数据核对脚本.py
@Author  : simon
@email   : [email protected]
@Software: PyCharm
@Time    : 2024/7/16 09:00
"""

import pandas as pd
from openpyxl import Workbook
from openpyxl.styles import PatternFill

# 读取Excel文件
file1 = 'MDM.xlsx'
file2 = 'MDP.xlsx'
df1 = pd.read_excel(file1)
df2 = pd.read_excel(file2)

# 用于替换NaN的值
na_value = "null"

# 合并数据,比较两个文件
merged_df = pd.merge(df1, df2, on='store_code', suffixes=('_file1', '_file2'), how='outer', indicator=True)

# 新建一个Workbook
wb = Workbook()
ws = wb.active

# 定义黄色填充
yellow_fill = PatternFill(start_color='FFFF00', end_color='FFFF00', fill_type='solid')

# 写入表头
headers = ['store_code'] + [col for col in df1.columns if col != 'store_code'] + ['_merge']
ws.append(headers)

# 找出不同的地方并写入新的Workbook
for index, row in merged_df.iterrows():
    diff = [row['store_code']]
    for col in df1.columns:
        if col != 'store_code':
            val_file1 = row[f'{col}_file1'] if pd.notna(row[f'{col}_file1']) else na_value
            val_file2 = row[f'{col}_file2'] if pd.notna(row[f'{col}_file2']) else na_value
            if val_file1 != val_file2:
                cell_value = f"{val_file1} -> {val_file2}"
            else:
                cell_value = val_file1
            diff.append(cell_value)
    diff.append(row['_merge'])
    ws.append(diff)

# 标记不同的地方为黄色
for row in ws.iter_rows(min_row=2, max_row=ws.max_row, min_col=2, max_col=ws.max_column - 1):
    for cell in row:
        if '->' in str(cell.value):
            cell.fill = yellow_fill

# 标识哪一个表没有某个值
for row in ws.iter_rows(min_row=2, max_row=ws.max_row, min_col=ws.max_column, max_col=ws.max_column):
    for cell in row:
        if cell.value == 'left_only':
            cell.fill = PatternFill(start_color='FF0000', end_color='FF0000', fill_type='solid')
            cell.value = 'MDP表缺失'
        elif cell.value == 'right_only':
            cell.fill = PatternFill(start_color='FF0000', end_color='FF0000', fill_type='solid')
            cell.value = 'MDM表缺失'

# 保存文件
output_file = 'diff_output_new.xlsx'
wb.save(output_file)

效果

可以看到下图将不同的地方做了标黄处理,填入了两个表的值

标签:文件,file1,差异,excel,value,cell,ws,col,row
From: https://www.cnblogs.com/simon1993/p/18307951

相关文章

  • windows电脑查看文件md5值
    使用cmd黑窗口,执行命令获取 md5值在对应文件内打开终端,输入:#xxx为你要查看文件的文件名certutil-hashfilexxxMD5TRANSLATEwithxEnglishArabicHebrewPolishBulgarianHindiPortugueseCatalanHmongDawRomanianChineseSimplifiedHungaria......
  • 操作系统实验四 文件管理
    实验目的与要求:   实验目的:(1)、掌握计算机操作系统管理进程、处理机、存储器、文件系统的基本方法。(2)、了解进程的创建、撤消和运行,进程并发执行;自行设计解决哲学家就餐问题的并发线程,了解线程(进程)调度方法;掌握内存空间的分配与回收的基本原理;通过模拟文件管理的工作......
  • JAVA操作Excel使用poi和easyexcel依赖的兼容性问题
      EasyExcel版本3.1.0及以上支持poi5.2.3。具体来说,EasyExcel3.1.0及之后的版本兼容poi4.1.2至5.2.2的范围,因此它确实支持poi5.2.3。但请注意,使用3.0.0及以上版本的EasyExcel配合poi5+时,需要手动在项目的依赖管理中排除poi-ooxml-schemas依赖,示例如下:<dependency>......
  • 通过图片文件头判断图片格式
    今天测试公司产品的时候发现一个Bug,上传图片需要在允许的格式下方可上传,例如常见的Png,从GPT下载下来的图片是.png的,但确实无法上传。拿到图片后查看文件头,发现是webp格式的。有些情况下,图片的后缀并不能真实的反应图片的格式,通过16进制能准确的判断出图片的真实格式。事实上,所有......
  • AI办公自动化007:用kimi批量加密PDF文件
    文章目录一、介绍二、输入内容三、输出内容一、介绍使用kimichat实现对PDF文件进行加密二、输入内容在kimichat中输入提示词:你是一个Python编程专家,要完成一个编写Python脚本的任务,具体步骤如下:联网检索PyPDF2库的最新使用方法;打开文件夹:D:\2024-05读......
  • js 将table转成Excel
    1.情景展示如何使用js将网页中的表格转成Excel文件?2.具体分析通过SheetJS的xlsx.js文件实现。3.解决方案下载地址:https://github.com/SheetJS/sheetjs/archive/refs/tags/v0.18.5.zip打开压缩包,找到dis目录下的xlsx.full.min.js将该文件解压出来,放到项目当中。在需要......
  • 购买一台云服务器,安装nvm,能够将配置全局命令链接js文件执行
    全局安装@vue/cli为什么会添加命令vuelinux或者MAC系统中通过whichvue查看vue地址,通过进入该地址查看文件发现软链接指向真实文件,真实文件同级别下的package.json中的bin字段中的名决定了输入命令vue2.全区安装@vue/cli时将包放在了node安装位置的node_modules下并且在包中的p......
  • 大侠立志传amd_ags_x64.dll丢失的修复教程:轻松教你解决amd_ags_x64.dll文件缺少问题
    当你在尝试运行《大侠立志传》或其他依赖AMD相关组件的游戏时,如果遇到了“amd_ags_x64.dll”文件丢失的错误,这可能是因为游戏需要的动态链接库(DLL)文件未被正确安装或已经损坏。以下是修复“amd_ags_x64.dll”文件丢失问题的一般步骤:步骤1:下载正确的amd_ags_x64.dll文件•首......
  • 折腾指南: 将光猫改造成你的NAS,WebDAV+网页文件管理器vList5+natmap
    原文:https://hi.imzlh.top/2024/07/18.cgi(预发布)很久没有写完全折腾类文章了,这还得追溯到上次折腾S905L3A那会。这篇文章很长,但是是小白级包学会。为什么会有这篇文章?这篇文章本来应该在4个月前就完成了,但是我一直都在折腾NAS软件其中我也尝试了很多方法,奈何时间不足断断续......
  • 001_字节码文件结构
    字节码有啥用呢?知道了字节码之后你会看到更广阔的天地。作为一个只会敲代码的打工人,你可能只会写java代码,但是知其然而不知其所以然也。大人,时代已经变了,曾经修个电脑就能上班的年代已经一去不复返。如果卷不动别人,就要被人卷。字节码概述JVM与字节码我们都知道java的出......