- #!/usr/bin/env python
- #coding=gbk
- #此PY用来统计一个execl文件中的特定一列的值的分类
- import win32com.client
- filename=raw_input("请输入要统计文件的详细地址:")
- flag=0 #用于判断文件 名如果不带‘日’就为 0
- if '\\xc8\\xd5' in filename:flag=1
- print 50*'='+'\\n\\t 请稍等,程序正在统计中。。。'
- try:
- xls=win32com.client.Dispatch('et.Application')
- try:
- xlsfile=xls.Workbooks.Open(filename) #打开指定的文件,一般打开的是sheet1
- sheet=xlsfile.Worksheets('Sheet1')
- except:
- print '文件找开错误!'
- exit(1)
- print '程序正在自动退出。。。'
- if sheet.Cells(3,6).Value!=u'业务类型' or sheet.Cells(3,3).Value!=u'转办单位':
- print '您输入的表格已不是默认的表格,数据格式有误'
- exit(1) #这个判断是当文件中的特定列改变时,直接退出程序
- i=4
- dept=sheet.Cells(i,3).Value
- type=sheet.Cells(i,6).Value
- typelist=[] #用于存放数据的列表,下面就是取sheet表里的某一列数据
- deptlist=[] #用于存放转办单位的列表
- while type:
- typelist.append(type)
- deptlist.append(dept)
- i=i+1
- type=sheet.Cells(i,6).Value
- dept=sheet.Cells(i,3).Value
- #存放列的数据到二个列表中
- counts=len(typelist) #总件数
- if counts==0:
- print '输入的文件统计结果为0,是否文件的格式有误?'
- exit(1)
- typelist=[(i,typelist.count(i)) for i in set(typelist)]
- departmentlist=[]
- delchar='0123456789' #删除取出列表中有可能带数字 分开字段有空格的话
- for i in deptlist[:]:
- i=''.join([j for j in i if j not in delchar])
- while '.' in i: i=i.replace('.',' ')
- deptlist+=i.split()
- deptlist=deptlist[counts:]
- deptlist=[(i,deptlist.count(i)) for i in set(deptlist)]
- #下面是打印格式等 。。。
- print '\\n'+50*'='
- print '\\t信访件总数为%d件,下面是各分类件数' % counts,
- print '\\n'+50*'='+'\\n'
- for i in range(len(typelist)):
- print '\\t',typelist[0],typelist[1],'\\t',
- if i % 2 ==1 : print '\\n'
- if flag==0:
- print '\\n'+50*'='+'\\n\\t下面是转办单位的分类\\n'+50*'='
- for i in range(len(deptlist)):
- print '\\t',deptlist[0],deptlist[1],'\\t',
- if i % 2 ==1 : print '\\n'
- finally:
- xls.Quit()
- raw_input('\\n\\n'+50*'='+'\\n请输入回车键退出程序!')
- print '正在退出程序,请稍等。。。'
- #该片段来自于http://www.codesnippet.cn/detail/251220121180.html
来源: http://www.codesnippet.cn/detail/251220121180.html