利用xlrd进行excel分类汇总
自从上周一留言板写好后,这几天几乎没写程序,一方面是因为这几天练车,时间少,更主要是没想好下面写点什么好,忘了,前几天还试着写了点pyqt。今天发一个小程序,昨晚写的,当时太晚了,今天发,
仍然是用xlrd,比上次用到的功能多了点,编写过程中遇到了一些问题,最终还是解决了。这个程序的目的是从一个学校资产xls文件里面读取数据,统计各项的数量及位置,原表是
统计后是这样,
其实只需统计,
比如某某教室桌子几张 椅子几把等等
具体代码
# -*- coding: utf-8 -*-
import os,shutil as s
import xlrd
xlsfile = u'外院总资产(2011[1][1].4.28导出).xls'
'''
名称 4
规格 6
位置 24
'''
data = xlrd.open_workbook(xlsfile)
table1 = data.sheets()[0]
t1name = table1.col_values(4)
#设备
names = {}
n=-1
for i in t1name:
n+=1
location = table1.cell(n,24).value
specification = table1.cell(n,6).value
a=i+' '+location
if a not in names:
names[a]=[location,specification,1]
else:
names[a][-1]+=1
file = open(u'设备.txt','w')
for item in names:
file.write(item.encode('UTF-8')+', '+names[item][1].encode('UTF-8')+', '+str(names[item][-1])+'\n')
file.close()
遇到的问题:
刚开始写的,在求location和specification时获取'i'的编号是用的是location = table1.cell(t1name.index(i),24).value,“ t1name.index(i) ” 结果发现生成文件的项目顺序和文件不一致,我把代码看了好几遍,仍然百思不得其解,只好用pyscripter调试,不过也没得出个所以然。只好一点点的打印中间值,发现得到值就有问题。后来想明白了, 因为某一个值不是唯一的,比如桌子,很多教室都有,在表格中的顺序是不连续的,t1name.index(i)得到的不一定是指定的那个值得序数,后来换成了用n表示序数,问题迎刃而解,这让我想起了python八荣八耻中的:
以打印日志为荣 , 以单步跟踪为耻;
呵呵,挺有道理的~
作者: Lerry
文章标题:利用xlrd进行excel分类汇总
发表时间:2011-05-04
版权说明:CC BY-NC-ND 4.0 DEED