复制对比列表信息【直接上源码】

有些时候,我们并不能用程序直接读取电脑内的表格数据[权限设置或文档加密]
这个时候,复制后进行操作就是一个比较便利的折中方式

整个脚本实现起来非常简单
1.读取复制到剪切板的数据
2.解析数据
3.进行操作,可以是对比或其他你喜欢的
4.返回结果

import win32clipboard as wc
import win32api
import time
import re
import os                                                                                #导入os模块
import os.path                                                                           #导入os.path模块
import xlrd                                                                              #导入第三方库xlrd
import sys   
#获取粘贴板里的内容
def getCopyTxet():
    zidian={}
    input('复制内容后回车:')
    wc.OpenClipboard()
    A = str(wc.GetClipboardData())
    wc.CloseClipboard()

    B = re.split(r'\n',str(A))

    for b in B:
        c = re.split(r'\t|\r',str(b))
        if len(c) >4:
           zidian[str(c[0])]=[str(c[2]),str(c[3])]
    return zidian
#把表格字典转化成表格样式的一整个字符串 返回字符串
def write_excel(A):                                                                      #创建一个转换字典为特定字符表的函数
    for B,C in A.items():                                                                #遍历表字典内的行:列键值对
        Hang = int(len(A))                                                               #获得行数
        Lie  = int(len(C))                                                               #获得列数
        Lie_Biao = []                                                                    #创建中转列:值对的列表
        Zuizhong = []                                                                    #创建最终所有列值对字符串列表
        for hhh in A.values():                                                           #遍历表中的列字典
            for lll in hhh.values():                                                     #遍历列字典的值
                Lie_Biao.append(str(lll))                                                #把值字符串化添加到值列表
        for hangshu in range(0, Hang + 1):                                               #定义行数为跳转步长
            guodu = Lie_Biao[hangshu * Lie:hangshu * Lie + Lie]                          #定义按每行转化成过渡切片
            jiange_1 = '\t'                                                              #定义一个制表符
            meiyihang = jiange_1.join(guodu)                                             #用制表符来连接切片中的每一列
            Zuizhong.append(meiyihang)                                                   #把由每一列连起来的每一行添加到最终列表
        jiange_2 = '\n'                                                                  #定义一个换行符
        zhenggebiao = jiange_2.join(Zuizhong)                                            #用换行符来连接最终列表内每个行元素
        return zhenggebiao                                                               #返回一个表示整个表的字符串
#把特定的字符串写入特定路径按特定名和格式保存
def save_excel(mistake,wenjianjialujing,baocunming,geshihouzhui):
    baocunming = str(baocunming)                                                         #指定保存名
    LUJING_NEW = wenjianjialujing + '\\' + baocunming + '.'+ geshihouzhui                #拼装最终路径
    f = open(LUJING_NEW, 'w',encoding='utf-8')                                                            # 在目的路径声明一个文件及格式并打开
    f.write(mistake)                                                              # 把处理好的信息写入这个文件
    f.close()                                                                            # 关闭写入操作





A = getCopyTxet()
B = getCopyTxet()
#print(A)

#1.汇总所有的料号
mistake = {}
mistake_name = []
for a,b in A.items():
    mistake[a]=''
for a,b in B.items():
    mistake[a]=''
for a,b in mistake.items():
    mistake_name.append(str(a))

#创建输出数据体
takeout={}

for i in range(0,len(mistake_name)):
    x = mistake_name[i]
    if x in A and x in B:
        one = re.split(r',',str(A[x][0]))
        one.sort()
        one = one +[str(A[x][1])]
        two = re.split(r',',str(B[x][0]))
        two.sort()
        two =two +[str(B[x][1])]
        if len(one) != len(two):
            takeout['第' + str(i) + '行'] = {}
            takeout['第' + str(i) + '行']['第' + str(1) + '列'] = str(x)
            takeout['第' + str(i) + '行']['第' + str(2) + '列'] = str(A[x][0])+ '\t' + str(A[x][1]) + '\t' + str(B[x][0])+ '\t' + str(B[x][1])
        else:
            for z in range(0,len(one)):
                if one[z] != two[z]:
                    takeout['第'+str(i)+'行'] = {}
                    takeout['第' + str(i) + '行']['第' + str(1) + '列'] = str(x)
                    takeout['第'+str(i)+'行']['第'+str(2)+'列']= str(A[x][0])+ '\t' + str(A[x][1]) + '\t' + str(B[x][0])+ '\t' + str(B[x][1])
    elif x in A and x not in B:
        takeout['第'+str(i)+'行'] = {}
        takeout['第' + str(i) + '行']['第' + str(1) + '列'] = str(x)
        takeout['第'+str(i)+'行']['第'+str(2)+'列']= str(A[x][0])+ '\t' + str(A[x][1]) + '\t' + str('第二次数据没有找到!')+ '\t' + str('第二次数据没有找到!')
    elif x not in A and x in B:
        takeout['第'+str(i)+'行'] = {}
        takeout['第' + str(i) + '行']['第' + str(1) + '列'] = str(x)
        takeout['第'+str(i)+'行']['第'+str(2)+'列']=str('第一次数据没有找到')+'\t'+str('第一次数据没有找到')+'\t'+str(B[x][0])+'\t'+str(B[x][1])

if takeout == {}:
    input('没有误差!Enter结束程序!')
else:
    path=input('输入保存路径:')
    BOM_mistake  = str(write_excel(takeout))
    save_excel(BOM_mistake,path,'BOMmistake','xlsx')
    input('误差结果已返回源文件夹!Enter结束程序!')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

isSamle

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值