---
title: "利用xlrd进行excel分类汇总"
url: "https://lerry.me/post/2011/05/xlrd_application_for_summerizing"
date: 2011-05-04T12:11:00.000Z
updated: 2026-08-31T10:58:53.229Z
tags:
language: zh-CN
---

# 利用xlrd进行excel分类汇总

自从上周一留言板写好后，这几天几乎没写程序，一方面是因为这几天练车，时间少，更主要是没想好下面写点什么好，忘了，前几天还试着写了点pyqt。今天发一个小程序，昨晚写的，当时太晚了，今天发，

仍然是用xlrd，比上次用到的功能多了点，编写过程中遇到了一些问题，最终还是解决了。这个程序的目的是从一个学校资产xls文件里面读取数据，统计各项的数量及位置，原表是

![](https://r2.lerry.me/next-blog/uploads/201105/04/pic.jpg)

统计后是这样，  
![](https://r2.lerry.me/next-blog/uploads/201105/04/pic2.jpg)  
  
其实只需统计，  
比如某某教室桌子几张 椅子几把等等  

具体代码

```python
# -*- 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八荣八耻中的：

**以打印日志为荣 , 以单步跟踪为耻;**  
  

呵呵，挺有道理的~
