目录
案例1:批量创建工作簿、工作表
案例2:将指定工作簿指定工作表下语文、数学两列成绩同时大于等于80的记录写入新工作簿
案例3:判断语文和数学两科之和属于哪个级别
案例4:统计出开始达标的月份以及业绩,其中每个人累计业绩大于等于1000则表示达标
案例五:统计“优良中差”等级出现的次数
案例六:汇总每个人的总成绩
案例七:判断指定姓名在指定日期是否值班
案例八:筛选各工作表中符合条件的值
案例九:统计出大于等于2万的记录到新表
案例十:提取产品最后的记录
案例十一:统计身份、客户名称、订单编号三列中唯一值
案例十二:查询未发货订单
案例十三:字典添加
案例十四:统计各日期的销售数据
案例十五:统计各省各公司总业绩
案例十六:判断指定项目是否存在
案例十七:多行多列求唯一值
案例十八:统计每个月每个战队的人数
案例十九:求每个人不达标的月份
案例二十:定义函数与使用1
案例二十一:函数与定义与使用2
案例二十二:函数定义与使用3
案例二十三:匿名函数使用
案例二十四:每月大于等于100的记录
import xlwt
x,y = 2015,0 #初始化变量,现在需要创建2015年到2018年每个月的工作表
while x<2018:
wb = xlwt.Workbook(encording = 'utf-8')#创建工作簿
x+=1
while y<12:
y+=1
ws = wb.add_sheet('%d 年%d 月'%(x,y))#创建工作表
y = 0 #初始化月份的变量,每一年创建12个月
wb.save('%d 年.xls'%x) #保存工作簿
import xlrd,xlwt
wb = xled.open_workbook('工作簿.xls') #读取工作簿文件
ws = wb.sheet_bu_name('数据')#读取工作表
nwb = xlwt.Workbook(encording = 'utf-8') #创建工作簿
nws = nwb.add_sheet('数据') #创建工作表
n,m = 0,0 #初始化变量 两个变量分别用于读数的行号和写入的行号
while n=80 and ws.cell_value(n,2)>=80: #根据数据所在的单元格判断对应的数据是否满足条件
m+=1
nws.write(m,0,ws.cell_value(n,0))#在新工作表中写入满足条件的数据,写入第一列数据
nws.write(m,1,ws.cell_value(n,1))#写入第二列数据
nws.write(m,2,ws.cell_value(n,2))#写入第三列数据
nws.write(0,0,'姓名')#写入标题
nws.write(0,1,'语文')#写入标题
nws.write(0,2,'英语')#斜入标题
nwb.save('筛选数据.xls')
import xlrd #导入读取模块
from xlutils.copy import copy #导入复制模块
wb = xlrd.open_workbook('工作簿.xls')#打开工作簿
ws = wb.sheet_by_name('data')#读取工作表
nwb = ws.copy(ws)#复制工作簿
nws = nwb.get_sheet('data')#读取工作表
n = 0 #初始化变量用于控制读取原始数据的行数
while n= 180:
nws.write(n,3,'优')
elif subtotal >= 160:
nws.write(n,3,'良')
elif subtotal >=120:
nws.write(n,3,'种')
else:
nws.write(n,3,'差')
nwb.save('数据.xlsx')
import xlrd
from xlutils.copy import copy
wb = xlrd.open_Workbook('工作簿.xls')
ws = wb.sheet_by_name('数据')
nwb = copy(ws)
nws = nwb.get_sheet('数据')
subtotal,n = 0,0
for i in range(1,ws.nrows): #遍历行号
for c in range(1,13): #遍历列号
subtotal+=ws.cell_value(r,c)
if subtotal >= 1000:
n+=1
nws.write(n,0,ws.cell_value(n,0))#在第一列中写入数据
nws.write(n,1,'%d 月份' %c)
nws.write(n,2,suntotal)
break #退出当前循环(每一列循环一次)
subtotal = 0
nwb.save('数据.xlsx')
import xlrd
wb = xlrd.open_workbook('工作簿.xls')
ws = wb.sheet_by_name('数据')
n,m = 0,0
for l in '优良中差':
while n
#方法一
import xlrd
from xlutils.copy import copy
wb = xlrd.open_workbook('工作簿.xls')
ws.wb.sheet_by_name('数据')
nwb = copy(wb)
nws = nwb.get_sheet('数据')
n=0,m=0 #初始化变量,n用于控制原始数据行号,m用于控制新表中的数据
while n
#方法二
import xlrd
from xlutils.copy import copy
wb=xlrd.open_workbook('工作簿.xls')
ws=wb.shet_by_name('数据')
nwb=copy(wb)
nws=nwb.get_sheet('数据')
col=ws.col_value(1)[1:] #所需数据提取
subtotal,n = 0,0
for v in col:
for score in v.split('-')[1::2]:
subtotal+=int(score)
n+=1
nws.write(n,0,ws.cell_value(n,0))
nws.write(n,1,subtotal)
subtotal=0
nwb.save('数据统计.xls')
import xlrd
from xlutils.copy import copy
wb=xlrd.open_workbook('工作簿.xls')
ws=wb.sheet_by_name('数据')
nwb=copy(wb)
nws=nwb.geet_sheet('数据')
r=0
while r
所用知识点:列表推导式
import xlrd,xlwt
wb=xlrd.open_workbook('工作簿.xls')
nwb=xlwt.Workbook(encording='utf-8')#创建新的工作簿
nws=nwb.add_sheet('数据')#在新工作簿中新增工作表
r=0
for ws in wb.sheets():#循环遍历工作表
col=ws.col_values(1)[1:]#读取指定数据
l=[str(int(amount)) for amount in in col if amount >=20000] #使用列表推导式求对应的结果
r+=1
nws.write(r,0,ws.name)
nws.write(r,1,'、',.join(l))
nwb.save('数据统计.xls')
使用知识点:列表推导式;表格中数据提取
import xlrd,xlwt
wb=xlrd.open_workbook('工作簿.xls')
nwb=xlwt.Workbook(encoding=utf-8)#创建新工作簿
nws=nwb.add_shert('数据')
r=0,n=0 #初始化变量
for ws in wb.sheets():#遍历工作簿中的所有工作表
col0=ws.col_values(0)[1:]
col1=ws.col_values(1)[1:]
l=[[x,y] for x,y in zip(col0,col1) if y>=20000]
for l1 in l:
n+=1
nws.write(n,0,ws.name)
nws.write(n,l1[0])
nws.write(n,2,l1[1])
nws.write(0,0,'月份')
nws.write(0,1,'日期')
nws.write(0,2,'金额')
nwb.save('数据统计结果.xls')
使用知识点:字典、数据提取处理
import xlrd
wb=xlrd.open_workbook('工作簿.xls')
ws=wb.sheet_by_name('数据')
r=0
d=dict() #创建空字典,用于存放字典数据
while r
使用知识:字典
import xlrd,xlwt
wb=xlrd.open_workbook('工作簿.xls')
ws=wb.sheet_by_name('数据')
nwb=xlrd.Workbook(encoding='utf-8')
nws=nwb.add_sheet('数据')
l=[ws.col_value(0),ws.col_value(1),ws.col_value(3)]
d=dict.fromkeys(zip(*l)) #赋值字典的值,dict.fromkeys 第一个参数是一个列表或者元组,里面的值为key,第二个参数是所有key的value值
r=0 #用于控制新数据写入的行数
for x in d:
nws.write(r,0,x[0])
nws.write(r,1,x[1])
nws.write(r,2,x[2])
r+=1
nwb.save('结果.xls')
在工作簿中有三个表,“全部订单”中显示了所有的订单,“已发货”显示已发货的订单,现需在“未发货”工作表中统计出未分货的订单
import xlrd
from xlutils.copy import copy
wb=xlrd.open_workbook('工作簿.xls')
ws1=wb.sheet_by_name('全部订单')
ws2=wb.sheet_by_name('已发货')
nwb=copy(wb)
nws=nwb.get_by_name('未发货')
l1=[ws1.col_values(0),ws1.col_values(1),ws1.col_values(2)]#取出数据表中的第一列、第一列数据、第三列 数据放在列表中
l2=[ws2.col_values(0),ws2.col_values(1),ws2.col_values(2)]
d1=dict.fromkeys(zip(*l1)) #组合数据表中第一列、第二列、第三列数据 {('省份', '客户名称', '订单编号')}
d2=list(dict.fromkeys(zip(*l2)))[1:] #指定组合后的数据放在列表中而不是字典中,同时数据不需要第一行数据
for x in d2:
d1.pop(x)
r=0
for x in d1:
nws.write(r,0,x[0])
nws.write(r,1,x[1])
nws.write(r,2,x[2])
r+=1
nwb.save('订单.xls')
import xlrd
wb=xlrd.open_workbook('工作簿.xls')
ws=wb.sheet_by_name('数据')
r=0
d=dict()
while r
import xlrd
wb=xlrd.open_workbook('工作簿.xls')
ws=wb.sheet_by_name('数据')
r=0
d={}
while r
需求介绍:
1、原始数据 字段省份、公司、日期、订单编号、出库单号、金额
2、需求:将每个省份分工作表,每个工作表中统计每个公司的销售总金额
import xlrd
import xlwt
wb=xlrd.open_workbook('工作簿.xls')
ws=wb.sheet_by_name('数据')
nwb=xlwt.Workbook(encoding='utf-8')
r=0
d={}
while r
使用知识点:集合
集合性质 无序,具有去重功能
import xlrd,xlwt
from xlutils.copy import copy
wb=xlrd.open_workbook('工作簿.xls')
ws=wb.sheet_by_name('数据')
nwb = copy(wb)
nws=nwb.get_sheet('Sheet1')
r=0
while r
知识点:利用集合的去重性
import xlrd,xlwt
wb=xlrd.open_workbook('工作簿.xls')
ws=wb.sheet_by_name('名次表')
nwb=xlwt.Workbook(encoding='utf-8')
nws=nwb.add_sheet('数据')
c=0
s=set()
while c
import xlrd,xlwt
wb=xlrd.open_workbook('工作簿.xls')
ws=wb.sheet_by_name('数据')
nwb=xlwt.Workbook(encoding='utf-8')#创建新工作簿
nws=nwb.add_sheet('数据')#创建新工作表
r=0
while r
import xlrd,xlwt
wb=xlrd.open_workbook('工作簿.xls')
ws=wb.sheet_by_name('数据')
nwb=xlwt.Workbook(encoding='utf-8')
nws=nwb.add_sheet('结果')
col1=ws.col_values(0)[1:]#姓名
col2=ws.col_values(1)[1:]#月份
s=set(zip(col1,col2))#姓名月份组成的一个簿重复的表
s1={'%d 月'%m for m in range(1,13)}#创建12个月份
s2=set(col1)#姓名去重
r=0
for m in s2:
s3='/'.join(s1-{y for x,y in s if m==x})
nws.write(r,0,m)
nws.write(r,1,s3)
r+=1
nwb.save('结果.xls')
知识点:函数定义与应用
improt xlrd
from xlutitls.copy import copy
#--------------------
def age(id,dit):
l = [id[x:y] for x,y in ((6,10),(10,12),(12,14))]
date=dit.join(l)
return date
#--------------------
wb=xlrd.open_workbook('工作簿.xls')
ws=wb.sheet_by_name('数据')
nwb=copy(wb)
nws=nwb.get_sheet('数据')
r=0
while r
背景:定义等级判断函数,根据定义好的等级函数判断提供分数的等级
import xlrd
from xlutils.copy import copy
def level(num,l1,l2,l3,l4):
if num>=l1:
l="优"
elif num>=l2:
l='良'
elif num>=l3:
l='中'
elif num>=l4:
l='差'
return l
wb=open_workbook('工作簿.xls')
ws=sheet_by_name('数据')
nwb=copy(wb)
nws=nwb.get_sheet('数据')
r=0
for c in ws.col_values(1)[1:]:
r+=1
nws.write(r,2,level(c,90,85,70,0))
nwb.save('结果.xls')
需求:函数字符串提取函数,提取指定分隔符后的字符串
import xlrd
from xlutils.copy import copy
def Text_pos(str,delimiter,position=0):
n,l=1,[-1]
while n<=str.count(delimiter):
l.append(str.index(delimiter,l[-1]+1))
n+=1
l=l[1:]
if position ==0:
l=l[0]
elif position ==1:
l=l[-1]
elif positon ==2:
l=l[:]
return l
def mid(text,start,num):
txt = text[start:start+num]
return txt
wb=xlrd.open_workbook('工作簿.xls')
ws=wb.sheet_by_name('数据')
nwb=copy(wb)
nws=nwb.get_sheet('数据')
n=0
for c in ws.col_values(1)[1:]:
n+1
l=[mid(','+c,x+1,6) for x in Text_pos(',',2)]
nws.write(n,2,'\'.join(l))
nwb.save('结果.xls')
需求:根据身份证号判断性别
import xlrd
from xlutils.copy import copy
wb = xlrd.open_workbook('工作簿.xls')
ws=wb.sheet_by_name('数据')
nwb=copy(wb)
nws=nwb.get_sheet('数据')
n=0
for c in ws.col_value(1)[1:]:
n+=1
nws.write(n,2,(lambda id:'男' if int(id[-2])%2==1 else '女')(c))
nwb.save('结果.xls')
使用知识点:高阶函数map的使用,map()接受两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并将结果作为新的list返回。
如:map(len,['677','89','89']) 就是求列表['677','89','89']的长度
import xlrd,xlwt
wb=xlrd.open_workbook('工作簿.xls')
nwb=xlwt.Workbook(encoding='utf-8')#创建新工作簿
nws=nwb.add_sheet('结果')
def counter(list):
return len([x for x in list if x>100])
n=0
for s in wb.sheets():
n+=1
nws.write(n,0,s.name)#s.name 工作表名称
nws.write(n,1,list(map(counter,[s.col_values(1)[1:]]))[0])#s.col_values(1)每个工作表中第二列的数据 该map函数表示求第二列中大于100的数据个数
nws.write(0,0,'月份')
nws.write(0,1,'计数')
nwb.save('结果.xls')