栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Python

python实现对比两个有增减的excel表格的不同并填充不同颜色

Python 更新时间:发布时间: 百科书网 趣学号
前言

处理两个excel库存表格,两周对比,有的产品已卖完,有的产品数量减小卖出,有的是新增加的产品。为了比较两个表格的不同,并填充颜色。分为三步:
先导入需要用到的库:

import xlwt
import xlrd
from openpyxl import load_workbook
import pandas as pd
import openpyxl as op
from openpyxl.styles import PatternFill
from openpyxl.styles import colors
from openpyxl.styles import Font
import openpyxl as vb
from xlutils.copy import copy
from openpyxl import Workbook

第一步:筛选关键词

从两个excel文件中筛选关键项到新的excel的不同sheet中

dirpath=r'xxxxxxxxxx'#目标文件夹路径
keyword='1111'#筛选关键词

if __name__ == '__main__':

    jieguo = xlwt.Workbook(encoding="ascii")  #生成新的excel
    newsheet1 = jieguo.add_sheet('上周',cell_overwrite_ok=True ) #生成sheet1  
    newsheet2 = jieguo.add_sheet('本周',cell_overwrite_ok=True ) #生成sheet2
    
    
    workbook1 = xlrd.open_workbook("xxxxxxxxxxx") #读取源excel文件1
    workbook2 = xlrd.open_workbook("xxxxxxxxxxxxxxx") #读取源excel文件2
    
    oldsheet1 = workbook1.sheet_by_index(0) #读取源excel文件第1个sheet的内容
    oldsheet2 = workbook2.sheet_by_index(0) #读取源excel文件第1个sheet的内容
    
    y=0 #生成的excel的行计数
    nrowsnum1=oldsheet1.nrows  #获取该sheet的行数
    for i in range(0,nrowsnum1):
          date1=oldsheet1.row(i) #获取该sheet第i行的内容
          for n in range(0,len(date1)):
              a1=str(date1[n]) #把该行第n个单元格转化为字符串,目的是下一步的关键字比对
              if a1.find(keyword)>0: #进行关键字比对,包含关键字返回1,否则返回0
                  y=y+1
                  for j in range(len(date1)):
                      newsheet1.write(y,j,oldsheet1.cell_value(i,j)) #该行包含关键字,则把它所有单元格依次写入入新生成的excel的第y行
    
    y=0 #生成的excel的行计数
    nrowsnum2=oldsheet2.nrows  #获取该sheet的行数
    for i in range(0,nrowsnum2):
          date2=oldsheet2.row(i) #获取该sheet第i行的内容
          for n in range(0,len(date2)):
              a2=str(date2[n]) #把该行第n个单元格转化为字符串,目的是下一步的关键字比对
              if a2.find(keyword)>0: #进行关键字比对,包含关键字返回1,否则返回0
                  y=y+1
                  for j in range(len(date2)):
                      newsheet2.write(y,j,oldsheet2.cell_value(i,j)) #该行包含关键字,则把它所有单元格依次写入入
    
    title = ['类型','物料编码','物料名称','规格型号','物料属性','物料分组编码','存货类别','仓库',
             '库存状态','批号','货主','保管者','账龄','数量(基本)','数量(库存)','参考价(基本)',
             '参考价(库存)','参考金额','天','类型'] #把表头名称放入list里面
    row = 0 #循环把表头写入
    for t in title:
        newsheet1.write(0,row,t)
        newsheet2.write(0,row,t)
        row+=1
                    
    jieguo.save('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx') #保存新生成的Excel
第二步:筛选出不同,并标记
		data_A = pd.read_excel('xxxxxx',sheet_name="上周")# 读取两个表
    data_B = pd.read_excel('xxxxxxxx',sheet_name="本周")
   
    data_A["Flag"] = ""
    data_B["Flag"] = ""# 是否添加高亮

    
    for A_index, A_row in data_A.iterrows():
        for B_index, B_row in data_B.iterrows():
            
            # B相对于A相同数量的产品
            if A_row["物料编码"] == B_row["物料编码"]:
                if A_row["账龄"] + 7 == B_row["账龄"]:
                    if A_row["数量(基本)"] == B_row["数量(基本)"]:
                        data_A.loc[A_index, "Flag"] = "1"
                        data_B.loc[B_index, "Flag"] = "1"
                        
            # B相对于A不同数量的产品
            if A_row["物料编码"] == B_row["物料编码"]:
                if A_row["账龄"] + 7 == B_row["账龄"]:
                    if A_row["数量(基本)"] != B_row["数量(基本)"]:
                        data_A.loc[A_index, "Flag"] = "0"
                        data_B.loc[B_index, "Flag"] = "0"
            
    writer = pd.ExcelWriter("xxxxxxxxxxx.xls")
    data_A.to_excel(writer, sheet_name='上周')
    data_B.to_excel(writer, sheet_name='本周')
    writer.save()                  
                       
第三步:填充颜色

#本周标注中:红色代表产品数量变化 蓝色代表相比于上周新增加的产品
#上周标注中:蓝色代表本周已经卖完不存在的产品

    styleA = xlwt.easyxf('pattern: pattern solid, fore_colour Red')
    styleB = xlwt.easyxf('pattern: pattern solid, fore_colour Blue')
    
    workbook = xlrd.open_workbook("xxxxxxx.xls")
    newb=copy(workbook) #复制成xlwt形式;
    newsheetA = newb.add_sheet('上周标注',cell_overwrite_ok=True ) #生成sheet  
    newsheetB = newb.add_sheet('本周标注',cell_overwrite_ok=True ) 
    
    oldsheetA = workbook.sheet_by_index(0) #读取源excel文件第1个sheet的内容
    oldsheetB = workbook.sheet_by_index(1) #读取源excel文件第2个sheet的内容
    
    
    nrowsnumA=oldsheetA.nrows 
    dateA = oldsheetA.col_values(21)
    print(dateA)
      
    for i in range(0,nrowsnumA):
        dateA1=oldsheetA.row(i)
        if  dateA[i] == '0':  
                for j in range(len(dateA1)):
                    newsheetA.write(i,j,oldsheetA.cell_value(i,j)) #该行包含关键字,则把它所有单元格依次写入入新生成的excel的第y行
        elif dateA[i] == '1':
                for m in range(len(dateA1)):
                    newsheetA.write(i,m,oldsheetA.cell_value(i,m))
        else:
                for n in range(len(dateA1)):
                    newsheetA.write(i,n,oldsheetA.cell_value(i,n),styleB)
   
   
    nrowsnumB=oldsheetB.nrows    
    dateB = oldsheetB.col_values(21)

    for i in range(0,nrowsnumB):
        dateB1=oldsheetB.row(i)
        if dateB[i]== '0': 
                for j in range(len(dateB1)):
                    newsheetB.write(i,j,oldsheetB.cell_value(i,j),styleA) #该行包含关键字,则把它所有单元格依次写入入新生成的excel的第y行
        elif dateB[i] == '1':
                for m in range(len(dateB1)):
                    newsheetB.write(i,m,oldsheetB.cell_value(i,m))
        else:
                for n in range(len(dateB1)):
                    newsheetB.write(i,n,oldsheetB.cell_value(i,n),styleB)
    
    newb.save("xxxxxxxxxxxxxx.xls")
转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/987034.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号