
处理两个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")