办公自动化——Python操作Excel案例
2022-04-13 本文已影响0人
我就是鱼鱼鱼
1、批量创建工作簿、工作表
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) #保存工作簿
2、筛选指定数据写入工作簿
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<ws.nrows-1:#开始循环数据,其中ws.nrows-1为原始数据表中所有数据的行数
n+=1
if ws.cell_value(n,1)>=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')
3、使用列表推导式筛选指定数据到工作簿
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')
4、求唯一值
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<ws.ncols-1:
c+=1
s1=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('结果.xls')
5、匿名函数使用
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')
6、动态获取但约个区域并汇总
import openpyxl
wb = openpyxl.load_workbook('工作簿.xlsx')
ws = wb.active #获取当前活跃的工作表
minr=ws.ws.min_row #最小行
minc=ws.min_column #最小列
maxr=ws.max_row #最大行
maxc=ws.max_column #最大列
rngs=ws.iter_rows(min_row=minr+1,min_col=minc+2,max_row=maxr-1,max_col=maxc-1)#动态获取数据区域
subtotal =[min([v.value for v in row]) for row in rngs]
7、多工作表合并
import openpyxl
wb=openpuxl.load_workbook('工作簿.xlsx')
nwb=openpyxl.Workbook()#新建工作簿
nws=nwb.active
nws.append(['年','月','金额']) #写入标题
for sh in wb:
l1=[[[sh.title]+[v.value for v in l]]for l in sh.rows][1:-1]
for l in l1:
nws.append(l)
nwb.save('合并.xlsx')