cshadow 发表于 2023-11-29 22:35

比较Excel两列数据,并分别显示差异

本帖最后由 cshadow 于 2023-11-29 22:40 编辑

利用 openpyxl 模块,操作Excel,比较Excel两列数据,并分别显示差异(日常工作内容,主要是为了摸鱼)

表格数据样例如下图


A,B两列是需要进行比较的数据(数据源为某网站公开数据);C,D两列是比较结果的输出列

A,B两列数据大都是通过半角逗号分割的人名,且排序为乱序,最后需要得到 C列:A有B无,D列:A无B有 两列数据

试过用 Beyond Compare,但效果一般;方方格子还有其他的倒是没试过



Python 源码如下
#-*- coding: utf-8 -*-

import openpyxl

def compare(path):
        # openpyxl 加载指定表格(操作时,表格需要为关闭状态)
        wb = openpyxl.load_workbook(path)
        # 指定需要操作的 表格页面
        ws = wb['Sheet']

        # A列数据
        col_a = []
        # B列数据
        col_b = []

        col_c = []
        col_d = []

        # 没有对A,B列中空数据进行特殊处理,如有需要,自行修改
        # 将A列数据拼接为list
        for col in list(ws.columns):
                col_a.append(str(col.value))

        # 将B列数据拼接为list
        for col in list(ws.columns):
                col_b.append(str(col.value))

        for i in range (0, len(col_a)):
                # A有B无
                s_a = ''
                # A无B有
                s_b = ''

                # 根据指定分隔符对表格内容进行分隔,如有多种分隔符,需要替换成同一种
                col_c = col_a.split(",")
                col_d = col_b.split(",")

                # 第三列数据为 A有B无
                for m in range(0, len(col_c)):
                        if col_b.find(col_c) == -1:
                                s_a = s_a + col_c + ','
                ws.cell(i+1, 3).value = s_a #末尾会加上 , 不需要的话,改成 ws.cell(i+1, 3).value = s_a[:-1]

                # 第四列数据为 A无B有
                for n in range(0, len(col_d)):
                        if col_a.find(col_d) == -1:
                                s_b = s_b + col_d + ','
                ws.cell(i+1, 4).value = s_b #末尾会加上 , 不需要的话,改成 ws.cell(i+1, 4).value = s_b[:-1]

        # 保存上述操作,不写这句,表格内容不会保存
        wb.save(path)
       
       
def main():
        # 指定表格路径
        excel_path = r'.\测试数据.xlsx'
        compare(excel_path)
       

if __name__ == '__main__':
        main()

孤狼微博 发表于 2023-11-30 00:15

本帖最后由 孤狼微博 于 2023-11-30 00:23 编辑

首先感谢你的分享,对于提取差集是非常有用的,如果单纯找出差异行
' ***********************************Start***********************************

在Excel中,对比两列差异的快捷键是:选中两列数据,然后按下Ctrl+\(反引号)键。这将自动高亮显示两列之间的差异。

在WPS中,要对比两列的差异,首先你需要选中需要对比的两列数据。然后按`Ctrl+G`打开定位功能,再选择“行内容差异单元格”,这样,两列中的差异项就会高亮显示出来。

JKARES 发表于 2023-12-2 16:16

# -*- coding: utf-8 -*-

import openpyxl

def compare(path):
    # openpyxl 加载指定表格(操作时,表格需要为关闭状态)
    wb = openpyxl.load_workbook(path)
    # 指定需要操作的 表格页面
    ws = wb['Sheet']

    # A列数据
    col_a = []
    # B列数据
    col_b = []

    col_c = []
    col_d = []

    # 没有对A,B列中空数据进行特殊处理,如有需要,自行修改
    # 将A列数据拼接为list
    for col in list(ws.columns):
      col_a.append(str(col.value).strip())# 去除首尾空白字符

    # 将B列数据拼接为list
    for col in list(ws.columns):
      col_b.append(str(col.value).strip())# 去除首尾空白字符

    for i in range(0, len(col_a)):
      # A有B无
      s_a = ''
      # A无B有
      s_b = ''

      # 根据指定分隔符对表格内容进行分隔,如有多种分隔符,需要替换成同一种
      col_c = col_a.split(",")
      col_d = col_b.split(",")

      # 第三列数据为 A有B无
      for m in range(0, len(col_c)):
            if col_b.find(col_c) == -1:
                s_a = s_a + col_c + ','
      ws.cell(i + 1, 3).value = s_a.rstrip(',')# 去除末尾的逗号

      # 第四列数据为 A无B有
      for n in range(0, len(col_d)):
            if col_a.find(col_d) == -1:
                s_b = s_b + col_d + ','
      ws.cell(i + 1, 4).value = s_b.rstrip(',')# 去除末尾的逗号

    # 保存上述操作,不写这句,表格内容不会保存
    wb.save(path)


def main():
    # 指定表格路径
    excel_path = r'.\测试数据.xlsx'
    compare(excel_path)


if __name__ == '__main__':
    main()

meder 发表于 2023-11-29 23:40

感谢分享,支持一下

jesaiahsean 发表于 2023-11-30 00:35

有什么方法可以实现跨行比较

storm2k 发表于 2023-11-30 06:21

感谢分享,想请教一下,如果想在指定列替换指定字符串后面的几位的字符串怎么实现?
比如:
dic = {'001':'(cap,①)',‘002’:‘(fob,①)’}

备注列
张三(pnr)李四四(foc)
小明(bat)小美(foc)

要替换掉()内的字符

blindcat 发表于 2023-11-30 06:33

学习一下

dx163 发表于 2023-11-30 08:06

A整列 跟 B整列 比较,把差异选出来,这个用的也很多呀。能否补充?

TangTonT 发表于 2023-11-30 08:15

学习了,感谢分享

wapjsx 发表于 2023-11-30 08:22

孤狼微博 发表于 2023-11-30 00:15
首先感谢你的分享,对于提取差集是非常有用的,如果单纯找出差异行
' ***********************************S ...

没去尝试,感觉很厉害!做个标记,谢谢。

luoyin168 发表于 2023-11-30 08:28


多谢分享,学习了。
页: [1] 2 3 4
查看完整版本: 比较Excel两列数据,并分别显示差异