使用的是python2, 安装了xlwt和xlrd库
pip install xlwt xlrd
#-*- coding=utf-8 -*-
from xlwt import *
import xlrd
def output(filename):
xlrd.Book.encoding="utf-8"
data=xlrd.open_workbook(filename)#原始文件的数据
ws=Workbook(encoding='utf-8')#生成文件的句柄
for s in range(1,len(data.sheets())):#遍历所有的sheet
sheet=data.sheets()[s]
print sheet.name
w=ws.add_sheet(sheet.name)#在新的excel中添加这个sheet
row=sheet.nrows #获取这页数据的总行数
aa={}
start=0
for i in range(0,row-1): #由于每个表的起始行数不太一样,所以使用了送货日期来定位具体从哪一行开始
if sheet.row_values(i)[0]==u"送货日期":
start=i
break
for i in range(0,sheet.ncols):#将表头数据写到新文件中
w.write(0,i,sheet.row_values(start)[i])
for i in range(start+1,row-1): #读取某列的数据,并将不同的数据分别存储
value= sheet.row_values(i)[10]
lb=[]
if value=='':
continue
if value in aa:
lb=aa[value]
lb.append(i)
aa[value]=lb
f=1
ttotal=0
tm=0
for key in aa:#之前已经将不同的数据行数记录下来,现在计算下每种数据的总和
bb=aa[key]
total=0
zz=0
m=0
for j in range(0,len(bb)):#
i=bb[j]
value=sheet.row_values(i)[11]
if not isinstance(value,unicode) and not isinstance(value,str):
total+=value
z=sheet.row_values(i)[7]
if not isinstance(z,unicode) and not isinstance(z,str):
zz+=sheet.row_values(i)[7]
mm=sheet.row_values(i)[8]
if not sheet.row_values(i)[3]==u"小缸费" and not isinstance(mm,unicode) and not isinstance(mm,str):
m+=mm
for k in range(0,sheet.ncols):
w.write(f,k,sheet.row_values(i)[k])
f=f+1
w.write(f,0,u"总金额:")#将结果写入新表
w.write(f,1,total)
w.write(f,2,u"总数量")
w.write(f,3,m)
f=f+2
ttotal+=total
tm+=m
print key,len(bb),u"总额=",total,u"总重=",zz,u"总量=",m
w.write(f,0,u"汇总金额")#将每一种数据汇总输出
w.write(f,1,ttotal)
w.write(f,2,u"汇总数量")
w.write(f,3,tm)
ws.save("output_"+filename)#保存到文件
if __name__=='__main__':
output(u"12月人民币总销售.xls")