办公自动化——Python操作Excel案例
目錄
案例1:批量創(chuàng)建工作簿、工作表
案例2:將指定工作簿指定工作表下語文、數(shù)學(xué)兩列成績同時大于等于80的記錄寫入新工作簿
案例3:判斷語文和數(shù)學(xué)兩科之和屬于哪個級別
案例4:統(tǒng)計出開始達(dá)標(biāo)的月份以及業(yè)績,其中每個人累計業(yè)績大于等于1000則表示達(dá)標(biāo)
?案例五:統(tǒng)計“優(yōu)良中差”等級出現(xiàn)的次數(shù)
案例六:匯總每個人的總成績
案例七:判斷指定姓名在指定日期是否值班
案例八:篩選各工作表中符合條件的值
案例九:統(tǒng)計出大于等于2萬的記錄到新表
案例十:提取產(chǎn)品最后的記錄
案例十一:統(tǒng)計身份、客戶名稱、訂單編號三列中唯一值
案例十二:查詢未發(fā)貨訂單
案例十三:字典添加
案例十四:統(tǒng)計各日期的銷售數(shù)據(jù)
案例十五:統(tǒng)計各省各公司總業(yè)績
案例十六:判斷指定項目是否存在
案例十七:多行多列求唯一值
案例十八:統(tǒng)計每個月每個戰(zhàn)隊的人數(shù)
案例十九:求每個人不達(dá)標(biāo)的月份
案例二十:定義函數(shù)與使用1
案例二十一:函數(shù)與定義與使用2
案例二十二:函數(shù)定義與使用3
案例二十三:匿名函數(shù)使用
案例二十四:每月大于等于100的記錄
案例1:批量創(chuàng)建工作簿、工作表
import xlwt x,y = 2015,0 #初始化變量,現(xiàn)在需要創(chuàng)建2015年到2018年每個月的工作表 while x<2018:wb = xlwt.Workbook(encording = 'utf-8')#創(chuàng)建工作簿x+=1while y<12:y+=1ws = wb.add_sheet('%d 年%d 月'%(x,y))#創(chuàng)建工作表y = 0 #初始化月份的變量,每一年創(chuàng)建12個月wb.save('%d 年.xls'%x) #保存工作簿案例2:將指定工作簿指定工作表下語文、數(shù)學(xué)兩列成績同時大于等于80的記錄寫入新工作簿
import xlrd,xlwt wb = xled.open_workbook('工作簿.xls') #讀取工作簿文件 ws = wb.sheet_bu_name('數(shù)據(jù)')#讀取工作表 nwb = xlwt.Workbook(encording = 'utf-8') #創(chuàng)建工作簿 nws = nwb.add_sheet('數(shù)據(jù)') #創(chuàng)建工作表 n,m = 0,0 #初始化變量 兩個變量分別用于讀數(shù)的行號和寫入的行號 while n<ws.nrows-1:#開始循環(huán)數(shù)據(jù),其中ws.nrows-1為原始數(shù)據(jù)表中所有數(shù)據(jù)的行數(shù)n+=1if ws.cell_value(n,1)>=80 and ws.cell_value(n,2)>=80: #根據(jù)數(shù)據(jù)所在的單元格判斷對應(yīng)的數(shù)據(jù)是否滿足條件m+=1nws.write(m,0,ws.cell_value(n,0))#在新工作表中寫入滿足條件的數(shù)據(jù),寫入第一列數(shù)據(jù)nws.write(m,1,ws.cell_value(n,1))#寫入第二列數(shù)據(jù)nws.write(m,2,ws.cell_value(n,2))#寫入第三列數(shù)據(jù) nws.write(0,0,'姓名')#寫入標(biāo)題 nws.write(0,1,'語文')#寫入標(biāo)題 nws.write(0,2,'英語')#斜入標(biāo)題 nwb.save('篩選數(shù)據(jù).xls')案例3:判斷語文和數(shù)學(xué)兩科之和屬于哪個級別
import xlrd #導(dǎo)入讀取模塊 from xlutils.copy import copy #導(dǎo)入復(fù)制模塊 wb = xlrd.open_workbook('工作簿.xls')#打開工作簿 ws = wb.sheet_by_name('data')#讀取工作表 nwb = ws.copy(ws)#復(fù)制工作簿 nws = nwb.get_sheet('data')#讀取工作表 n = 0 #初始化變量用于控制讀取原始數(shù)據(jù)的行數(shù) while n<ws.nrows-1:n+=1subtotal = ws.cell_value(n,1)+ws.cell_value(n,2)#對指定數(shù)據(jù)進(jìn)行處理if subtotal >= 180:nws.write(n,3,'優(yōu)')elif subtotal >= 160:nws.write(n,3,'良')elif subtotal >=120:nws.write(n,3,'種')else:nws.write(n,3,'差') nwb.save('數(shù)據(jù).xlsx')案例4:統(tǒng)計出開始達(dá)標(biāo)的月份以及業(yè)績,其中每個人累計業(yè)績大于等于1000則表示達(dá)標(biāo)
import xlrd from xlutils.copy import copy wb = xlrd.open_Workbook('工作簿.xls') ws = wb.sheet_by_name('數(shù)據(jù)') nwb = copy(ws) nws = nwb.get_sheet('數(shù)據(jù)') 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+=1nws.write(n,0,ws.cell_value(n,0))#在第一列中寫入數(shù)據(jù)nws.write(n,1,'%d 月份' %c)nws.write(n,2,suntotal)break #退出當(dāng)前循環(huán)(每一列循環(huán)一次)subtotal = 0 nwb.save('數(shù)據(jù).xlsx')?案例五:統(tǒng)計“優(yōu)良中差”等級出現(xiàn)的次數(shù)
import xlrd wb = xlrd.open_workbook('工作簿.xls') ws = wb.sheet_by_name('數(shù)據(jù)') n,m = 0,0 for l in '優(yōu)良中差':while n<ws.nrows-1:n+=1m+=ws.cell_value(n,1).count(l) #累計等級次數(shù)print(m)n,m = 0,0案例六:匯總每個人的總成績
#方法一 import xlrd from xlutils.copy import copy wb = xlrd.open_workbook('工作簿.xls') ws.wb.sheet_by_name('數(shù)據(jù)') nwb = copy(wb) nws = nwb.get_sheet('數(shù)據(jù)') n=0,m=0 #初始化變量,n用于控制原始數(shù)據(jù)行號,m用于控制新表中的數(shù)據(jù) while n<ws.nrows-1:n+=1l=ws.cell_value(n,1).split('-')[1::2] #提取想要的數(shù)據(jù)for v in l:m+=int(v)nws.write(n,0,ws.cell_value(n,0))#寫入數(shù)據(jù)nws.write(n,1,m)m=0 nwb.save('數(shù)據(jù)統(tǒng)計.xls') #方法二import xlrd from xlutils.copy import copy wb=xlrd.open_workbook('工作簿.xls') ws=wb.shet_by_name('數(shù)據(jù)') nwb=copy(wb) nws=nwb.get_sheet('數(shù)據(jù)') col=ws.col_value(1)[1:] #所需數(shù)據(jù)提取 subtotal,n = 0,0 for v in col:for score in v.split('-')[1::2]:subtotal+=int(score)n+=1nws.write(n,0,ws.cell_value(n,0))nws.write(n,1,subtotal)subtotal=0nwb.save('數(shù)據(jù)統(tǒng)計.xls')案例七:判斷指定姓名在指定日期是否值班
import xlrd from xlutils.copy import copy wb=xlrd.open_workbook('工作簿.xls') ws=wb.sheet_by_name('數(shù)據(jù)') nwb=copy(wb) nws=nwb.geet_sheet('數(shù)據(jù)') r=0 while r<nrows-1:r+=1row= ws.row_values(r)if "小明" in row:nws.write(r,6,'是')else:nws.write(r,6,'否') nwb.save('數(shù)據(jù)統(tǒng)計.xls')案例八:篩選各工作表中符合條件的值
所用知識點:列表推導(dǎo)式
import xlrd,xlwt wb=xlrd.open_workbook('工作簿.xls') nwb=xlwt.Workbook(encording='utf-8')#創(chuàng)建新的工作簿 nws=nwb.add_sheet('數(shù)據(jù)')#在新工作簿中新增工作表 r=0 for ws in wb.sheets():#循環(huán)遍歷工作表col=ws.col_values(1)[1:]#讀取指定數(shù)據(jù)l=[str(int(amount)) for amount in in col if amount >=20000] #使用列表推導(dǎo)式求對應(yīng)的結(jié)果r+=1nws.write(r,0,ws.name)nws.write(r,1,'、',.join(l)) nwb.save('數(shù)據(jù)統(tǒng)計.xls')案例九:統(tǒng)計出大于等于2萬的記錄到新表
使用知識點:列表推導(dǎo)式;表格中數(shù)據(jù)提取
import xlrd,xlwt wb=xlrd.open_workbook('工作簿.xls') nwb=xlwt.Workbook(encoding=utf-8)#創(chuàng)建新工作簿 nws=nwb.add_shert('數(shù)據(jù)') 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+=1nws.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('數(shù)據(jù)統(tǒng)計結(jié)果.xls')案例十:提取產(chǎn)品最后的記錄
使用知識點:字典、數(shù)據(jù)提取處理
import xlrd wb=xlrd.open_workbook('工作簿.xls') ws=wb.sheet_by_name('數(shù)據(jù)') r=0 d=dict() #創(chuàng)建空字典,用于存放字典數(shù)據(jù) while r <ws.nrows-1:key=ws.celll_value(r,0)#cell_value用于提取單元格的值,里面的參數(shù)為行列的編號val=ws.cell_value(r,1)d[key]=val #賦值key的值r+=1 print(d)案例十一:統(tǒng)計身份、客戶名稱、訂單編號三列中唯一值
使用知識:字典
import xlrd,xlwt wb=xlrd.open_workbook('工作簿.xls') ws=wb.sheet_by_name('數(shù)據(jù)') nwb=xlrd.Workbook(encoding='utf-8') nws=nwb.add_sheet('數(shù)據(jù)') l=[ws.col_value(0),ws.col_value(1),ws.col_value(3)] d=dict.fromkeys(zip(*l)) #賦值字典的值,dict.fromkeys 第一個參數(shù)是一個列表或者元組,里面的值為key,第二個參數(shù)是所有key的value值 r=0 #用于控制新數(shù)據(jù)寫入的行數(shù) 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('結(jié)果.xls')案例十二:查詢未發(fā)貨訂單
在工作簿中有三個表,“全部訂單”中顯示了所有的訂單,“已發(fā)貨”顯示已發(fā)貨的訂單,現(xiàn)需在“未發(fā)貨”工作表中統(tǒng)計出未分貨的訂單
import xlrd from xlutils.copy import copy wb=xlrd.open_workbook('工作簿.xls') ws1=wb.sheet_by_name('全部訂單') ws2=wb.sheet_by_name('已發(fā)貨') nwb=copy(wb) nws=nwb.get_by_name('未發(fā)貨') l1=[ws1.col_values(0),ws1.col_values(1),ws1.col_values(2)]#取出數(shù)據(jù)表中的第一列、第一列數(shù)據(jù)、第三列 數(shù)據(jù)放在列表中 l2=[ws2.col_values(0),ws2.col_values(1),ws2.col_values(2)] d1=dict.fromkeys(zip(*l1)) #組合數(shù)據(jù)表中第一列、第二列、第三列數(shù)據(jù) {('省份', '客戶名稱', '訂單編號')} d2=list(dict.fromkeys(zip(*l2)))[1:] #指定組合后的數(shù)據(jù)放在列表中而不是字典中,同時數(shù)據(jù)不需要第一行數(shù)據(jù)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('數(shù)據(jù)') r=0 d=dict() while r<ws.nrows-1:r+=1item=ws.row_values(r)[1:]if item[0] in d.keys():#判斷鍵在字典中是否存在d[item[0]]+=item[1]else:d[item[0]]=item[1] print(d)案例十四:統(tǒng)計各日期的銷售數(shù)據(jù)
import xlrd wb=xlrd.open_workbook('工作簿.xls') ws=wb.sheet_by_name('數(shù)據(jù)') r=0 d={} while r<ws.nrows-1:r+=1key=ws.cell_value(r,0)value=ws.cell_value(r,1)if key in d.keys():d[key]+=[int[value]]else:d[key]=[int(value)] for k in d:print(k,[sum(d[k]),max(d[k]),min(d[k]),len(d[k])]) #d[k]是以k為鍵的所有值案例十五:統(tǒng)計各省各公司總業(yè)績
需求介紹:
1、原始數(shù)據(jù) 字段省份、公司、日期、訂單編號、出庫單號、金額
2、需求:將每個省份分工作表,每個工作表中統(tǒng)計每個公司的銷售總金額
import xlrd import xlwt wb=xlrd.open_workbook('工作簿.xls') ws=wb.sheet_by_name('數(shù)據(jù)') nwb=xlwt.Workbook(encoding='utf-8') r=0 d={} while r<ws.nrows-1:r+=1l=ws.row_values(r)#按行取數(shù)據(jù),每一行存放在一個列表中if (l[0],l[1]) in d.key(): #l[0] 地區(qū) l[1]公司名稱d[(l[0],l[1])]+=l[5]else:d[(l[0],l[1])]=l[5] l1 = dict.fromkeys([x for x,y in d.keys()]).keys() #l1 數(shù)據(jù)中所有的地區(qū) r=0 for s in l1:nws=nwb.add_sheet(s)nws.write(0,0,'省份')nws.write(0,1,'公司名')nws.write(0,2,'總金額')l2=[[x[0],x[1],y] for x,y in d.item() if x[0]==s]for val in l2:r+=1nws.write(r,0,val[0])nws.write(r,1,val[1])nws.write(r,2,val[2])r=0 nwb.save('匯總數(shù)據(jù)表.xls')案例十六:判斷指定項目是否存在
使用知識點:集合?
集合性質(zhì) 無序,具有去重功能
import xlrd,xlwt from xlutils.copy import copy wb=xlrd.open_workbook('工作簿.xls') ws=wb.sheet_by_name('數(shù)據(jù)') nwb = copy(wb) nws=nwb.get_sheet('Sheet1') r=0 while r<ws.nrows-1:r+=1v=ws.cell_value(r,1)if set(v.split('\'))=={'鋼琴','繪畫','書法','武術(shù)'}:nws.write(r,2,'全部')else:nws.write(r,2,'部分') nwb.save('結(jié)果.xls')案例十七:多行多列求唯一值
知識點:利用集合的去重性?
import xlrd,xlwt wb=xlrd.open_workbook('工作簿.xls') ws=wb.sheet_by_name('名次表') nwb=xlwt.Workbook(encoding='utf-8') nws=nwb.add_sheet('數(shù)據(jù)') c=0 s=set() while c<ws.ncols-1:c+=1s1=set(ws.col_values(c)[1:])s.update(s1) l=list(s) for n in range(len(s)):nws.write(n+1,0,n+1)nws.write(n+1,1,l[n]) nws.write(0,0,'編號') nws.write(0,1,'姓名') nwb.save('結(jié)果.xls')案例十八:統(tǒng)計每個月每個戰(zhàn)隊的人數(shù)
import xlrd,xlwt wb=xlrd.open_workbook('工作簿.xls') ws=wb.sheet_by_name('數(shù)據(jù)') nwb=xlwt.Workbook(encoding='utf-8')#創(chuàng)建新工作簿 nws=nwb.add_sheet('數(shù)據(jù)')#創(chuàng)建新工作表 r=0 while r<ws.nrows-1:r+=1l=ws.row_values(r)l1=[x,split('-')[1] for x in l[1].split(',')]l2=[l[0],'/'.join({'%s:%d 人'%(x,l1.count(x)) for x in l1})]#數(shù)據(jù)處理與數(shù)據(jù)拼接nws.write(r,2,l2[0])nws.write(r,2,l2[1]) nwb.save('結(jié)果.xls')案例十九:求每個人不達(dá)標(biāo)的月份
import xlrd,xlwt wb=xlrd.open_workbook('工作簿.xls') ws=wb.sheet_by_name('數(shù)據(jù)') nwb=xlwt.Workbook(encoding='utf-8') nws=nwb.add_sheet('結(jié)果') col1=ws.col_values(0)[1:]#姓名 col2=ws.col_values(1)[1:]#月份 s=set(zip(col1,col2))#姓名月份組成的一個簿重復(fù)的表 s1={'%d 月'%m for m in range(1,13)}#創(chuàng)建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('結(jié)果.xls')案例二十:定義函數(shù)與使用1
知識點:函數(shù)定義與應(yīng)用
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('數(shù)據(jù)') nwb=copy(wb) nws=nwb.get_sheet('數(shù)據(jù)') r=0 while r<ws.nrows-1:r+=1nws.write(r,2,age(ws.cell_value(r,1),'-'))案例二十一:函數(shù)與定義與使用2
背景:定義等級判斷函數(shù),根據(jù)定義好的等級函數(shù)判斷提供分?jǐn)?shù)的等級
import xlrd from xlutils.copy import copy def level(num,l1,l2,l3,l4):if num>=l1:l="優(yōu)"elif num>=l2:l='良'elif num>=l3:l='中'elif num>=l4:l='差'return lwb=open_workbook('工作簿.xls') ws=sheet_by_name('數(shù)據(jù)') nwb=copy(wb) nws=nwb.get_sheet('數(shù)據(jù)') r=0 for c in ws.col_values(1)[1:]:r+=1nws.write(r,2,level(c,90,85,70,0)) nwb.save('結(jié)果.xls')案例二十二:函數(shù)定義與使用3
需求:函數(shù)字符串提取函數(shù),提取指定分隔符后的字符串
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+=1l=l[1:]if position ==0:l=l[0]elif position ==1:l=l[-1]elif positon ==2:l=l[:]return ldef mid(text,start,num):txt = text[start:start+num]return txtwb=xlrd.open_workbook('工作簿.xls') ws=wb.sheet_by_name('數(shù)據(jù)') nwb=copy(wb) nws=nwb.get_sheet('數(shù)據(jù)') n=0 for c in ws.col_values(1)[1:]:n+1l=[mid(','+c,x+1,6) for x in Text_pos(',',2)]nws.write(n,2,'\'.join(l)) nwb.save('結(jié)果.xls')案例二十三:匿名函數(shù)使用
需求:根據(jù)身份證號判斷性別
import xlrd from xlutils.copy import copy wb = xlrd.open_workbook('工作簿.xls') ws=wb.sheet_by_name('數(shù)據(jù)') nwb=copy(wb) nws=nwb.get_sheet('數(shù)據(jù)') 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('結(jié)果.xls')案例二十四:每月大于等于100的記錄
使用知識點:高階函數(shù)map的使用,map()接受兩個參數(shù),一個是函數(shù),一個是序列,map將傳入的函數(shù)依次作用到序列的每個元素,并將結(jié)果作為新的list返回。
如:map(len,['677','89','89']) 就是求列表['677','89','89']的長度
import xlrd,xlwt wb=xlrd.open_workbook('工作簿.xls') nwb=xlwt.Workbook(encoding='utf-8')#創(chuàng)建新工作簿 nws=nwb.add_sheet('結(jié)果') def counter(list):return len([x for x in list if x>100]) n=0 for s in wb.sheets():n+=1nws.write(n,0,s.name)#s.name 工作表名稱nws.write(n,1,list(map(counter,[s.col_values(1)[1:]]))[0])#s.col_values(1)每個工作表中第二列的數(shù)據(jù) 該map函數(shù)表示求第二列中大于100的數(shù)據(jù)個數(shù) nws.write(0,0,'月份') nws.write(0,1,'計數(shù)') nwb.save('結(jié)果.xls')總結(jié)
以上是生活随笔為你收集整理的办公自动化——Python操作Excel案例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 服务器:浅谈 Nginx 性能调优,太实
- 下一篇: 3d打印英语文献_锐医学院 | 只需10