python简单处理excel方法
python自带xlrd和xlwt模块用来处理excel,但总觉得xlwt模块用着别扭,于是按自己的习惯重新封装了一个
1 # coding=utf-8 2 3 import xlrd # 读模块 4 import xlwt # 写模块 5 6 7 def read_excel(): 8 """ 9 读取excel文件方法说明(此函数只是对xlrd用法的说明,看看就好。xlrd已经很好用了) 10 :return: 11 """ 12 # 打开excel文件 13 data = xlrd.open_workbook('123.xls') 14 15 # 获取文件内的表名 16 print(data.sheet_names()) 17 18 # 获取指定表的两种方法 19 sh = data.sheet_by_index(0) # 索引法 20 sh = data.sheet_by_name(u'Sheet1') # 表名法 21 22 # 获取表的行数 23 print(sh.nrows) 24 # 获取表的列数 25 print(sh.ncols) 26 27 # 获取第29行的数据(0算第一行) 28 print(sh.row_values(28)) 29 # 获取第2列的数据(0算第一列) 30 print(sh.col_values(1)) 31 # 获取第1行、第2列的数据(相当于坐标) 32 print(sh.cell(0, 1).value) 33 34 35 def write_excel(sheet_name, row0, datas, file_name): 36 """ 37 自己重新封装的写入excel表模块。以后要将数据写入excel直接调用此函数就行。此函数简单干净,使用方便。 38 :param sheet_name: excel文件内的表名。例:Sheet1 39 :param row0: 表内第一行的内容,为一个列表。例:[id, name, sex] 40 :param datas: 实际要写入表内的数据,为一个列表,里面包含几个元素就写几行数据,其中每一个元素又为一个列表,里面对应这一行 41 每列的值。例:[[1, '小龙女', 'girl'], [2, '杨过', 'boy'], [3, '周伯通', 'boy']] 42 :param file_name: 最终生成的excel文件名。例:'test.xls' 43 :return: 44 """ 45 # 创建一个写对象实例 46 f = xlwt.Workbook() 47 48 # 创建一个叫sheet_name的表名 49 sheet1 = f.add_sheet(sheet_name, cell_overwrite_ok=True) 50 51 # 创建表sheet_name的第一行(即标题) 52 for i in range(0, len(row0)): 53 sheet1.write(0, i, row0[i]) 54 55 # 从第二行开始写数据,datas有多少元素就写多少行 56 for row in range(1, len(datas) + 1): 57 # 遍历每行的每一列,row0有多少元素就遍历多少列 58 for col in range(len(row0)): 59 # 有了上面row,col提供的行号和列号就可以精确匹配一个单元格了,下面就开始往单元格里写数据了 60 # row:行号,col:列号,datas[row-1][col]:数据 61 # 注:datas这个列表里一个元素为一行,由于是从第二行开始写的,所以想要取datas的第一个元素需row-1 62 # 注:datas这个列表里一个元素(列表)里的元素对应这行每列的值。 63 # 例:[1, '小龙女', 'girl'],1对应第1列的值,'小龙女'对应第2列的值,'girl'对应第三列的值 64 sheet1.write(row, col, datas[row-1][col]) 65 66 f.save(file_name) 67 print('已生成excel文件!') 68 69 70 if __name__ == '__main__': 71 read_excel() 72 write_excel( 73 sheet_name='students', 74 row0=['id', 'name', 'sex'], 75 datas=[[1, '小龙女', 'girl'], [2, '杨过', 'boy'], [3, '周伯通', 'boy']], 76 file_name='test.xls' 77 )