python处理excel(一):读

功能:读取一个excel里的第2个sheet,将该sheet的内容全部输出。

 1 #coding=utf8
 2 import xlrd
 3 
 4 def read_excel():
 5     workbook = xlrd.open_workbook('demo.xlsx')
 6     sheet2 = workbook.sheet_by_index(1) # sheet索引从0开始
 7     rowNum = sheet2.nrows
 8     colNum = sheet2.ncols
 9     
10     llst = []
11     for i in range(rowNum):
12         lst = []
13         for j in range(colNum):
14             lst.append(sheet2.cell_value(i, j))
15         llst.append(lst)
16 
17     for i in range(rowNum):
18         for j in range(colNum):
19             print llst[i][j],'\t\t',
20         print
21 
22 if __name__ == '__main__':
23     read_excel()

 notes:

python对于缩进非常严苛。如果最后两句话不小心向后缩进了一下,与17行的for对齐了,那说明这两句话是read_excel函数体内部的。那就乱套了。

指定一个excel里的具体哪一个sheet,即可以按序号顺序来定位(比如第一个sheet,第2个sheet),也可以按名字来找(比如第2个sheet如果名字叫‘Sheet2’的话,就用

workbook.sheet_by_name('Sheet2') 来定位sheet

 获取一个cell里面的内容,可以有多种方式,比如:

sheet2.cell_value(1,0)
sheet2.row(1)[0].value

sheet2.cell(1,0).value

注意。读取到的excel的表格里的值都是unicode模式的。这种情况下如果想正确输出的话,直接print就可以。比如放在list里面,依次对list的每个元素进行print。

但是不能直接print lst。这样的话打出来还是unicode的形式。

正常情况下对于unicode的对象,用encode可以将一个unicode对象转换为参数中编码格式的普通字符。这一部分可参考 ref  ref2

print如果不想换行的话,直接在print结束后加一个逗号即可。

如果想实现c++里endl一样的换行,直接打上一行print就行了,不需要任何参数。 

 =========  ==========  =========  ==========  =========  ==========

下面代码纯粹为了展示一下关于excel的其他操作。

ref1     ref2     ref3 (ref1代码很清晰,ref3列出了xlrd,xlwt的一些接口可以方便参考)

 1 #coding=utf8
 2 import xlrd
 3 
 4 def read_excel():
 5     # 打开文件
 6     workbook = xlrd.open_workbook('demo.xlsx')
 7     # 获取所有sheet
 8     #print workbook.sheet_names() # [u'Sheet1', u'Sheet2']
 9     sheet2_name = workbook.sheet_names()[1]
10 
11     # 根据sheet索引或者名称获取sheet内容
12     sheet2 = workbook.sheet_by_index(1) # sheet索引从0开始
13     sheet2 = workbook.sheet_by_name('Sheet2')
14 
15     # sheet的名称,行数,列数
16     print 'sheet的名称,行数,列数'
17     print sheet2.name,sheet2.nrows,sheet2.ncols
18     
19     rowNum = sheet2.nrows
20     colNum = sheet2.ncols
21     # 获取整行和整列的值(数组)
22     rows = sheet2.row_values(3) # 获取第四行内容
23     cols = sheet2.col_values(2) # 获取第三列内容
24     print '第四行:'
25     print rows
26 
27     llst = []
28     for i in range(rowNum):
29         lst = []
30         for j in range(colNum):
31             lst.append(sheet2.cell_value(i, j))
32         llst.append(lst)
33 
34     for i in range(rowNum):
35         for j in range(colNum):
36             print llst[i][j],'\t\t',
37         print
38 
39 if __name__ == '__main__':
40     read_excel()
View Code

 

实例:

原excel:

 

像电话号码、年龄后面还带小数,还没来得及处理。

其他参考资料:ref  ref2   

posted @ 2016-05-13 13:40  Ryan in C++  阅读(929)  评论(0编辑  收藏  举报