【python】解析Excel中使用xlrd库、xlwt库操作,读取excel进阶完整脚本实例(四)

本次主要通过脚本展现使用xlrd库、xlwt库的完整操作,对象是比较常见的表格,通过这两个脚本的学习,实现对Excel的进阶操作。

首先,我们定义一个表格example_excel.xls,如图所示:

完整脚本如下:

# -*- coding: utf-8 -*-"""Created on Wed Jan 17 15:31:36 2018excel读取操作脚本@author: BruceWong"""import xlrdfrom datetime import date,datetime def read_excel(file):    #打开文件    workbook = xlrd.open_workbook(file,formatting_info=True)    #打印所有的sheet表名    print(workbook.sheet_names())    print(workbook.sheets())    #得到第一张表的名字    sheet1_name = workbook.sheet_names()[0]    #根据sheet索引或者名称获取sheet的内容    sheet1_by_list = workbook.sheets()[0]    sheet1_by_index = workbook.sheet_by_index(0) #sheet索引从0开始    sheet1_by_name = workbook.sheet_by_name(sheet1_name)    #获取sheet的名称和行、列数    print(sheet1_by_list.name,sheet1_by_list.nrows,sheet1_by_list.ncols,          sheet1_by_index.name,sheet1_by_index.nrows,sheet1_by_index.ncols,          sheet1_by_name.name,sheet1_by_name.nrows,sheet1_by_name.ncols)    #获取整行或者整列的值    rows = sheet1_by_name.row_values(0) #获取第一行的值    cols = sheet1_by_name.col_values(0) #获取第一列的值    print(rows,          cols)    #获取单元格内容,A\b\c\D在excel中是第1、2、3、4列    cell_A1 = sheet1_by_name.cell(0,0).value    cell_C1 = sheet1_by_name.cell(0,2).value    cell_B1 = sheet1_by_name.row(0)[1].value    cell_D2 = sheet1_by_name.col(3)[1].value    print(cell_A1,cell_C1,cell_B1,cell_D2)    #获取单元格的数据类型    #ctype:0:empty;1:string;2:number; 3:date;4:boolean;5:error     print('cell(0,0)数据类型:', sheet1_by_name.cell(0,0).ctype)    print('cell(1,0)数据类型:', sheet1_by_name.cell(1,0).ctype)    print('cell(1,1)数据类型:', sheet1_by_name.cell(1,1).ctype)     print('cell(1,2)数据类型:', sheet1_by_name.cell(1,2).ctype)    #如果返回的值是0,说明这个单元格的值是空值    #获取单元格内容为日期的数据    date_value = xlrd.xldate_as_tuple(sheet1_by_name.cell_value(2,2),workbook.datemode)    print(date_value)    #生成日期    print(date(*date_value[:3]))    #转化为标准格式    #首先对单元格的内容做一个判断处理,然后做时间修改    if (sheet1_by_name.cell(2,2).ctype == 3):          date_value = xlrd.xldate_as_tuple(sheet1_by_name.cell_value(2,2),workbook.datemode)         print(date(*date_value[:3]).strftime('%Y/%m/%d'))    #对合并单元格的处理,读取合并单元格值    #合并单元格起始项是可以索引到值     print('cell(1,4)值:', sheet1_by_name.cell(1,4).value)  #朋友    #合并单元格起始项是不可以索引到值     print('cell(2,4)值:', sheet1_by_name.row(2)[4].value)     #空值    print('cell(2,4)数据类型:', sheet1_by_name.cell(2,4).ctype)    #获取合并的单元格    '''    读取整个excel文件的时候需要将formatting_info参数设置为True,默认是False;    workbook = xlrd.open_workbook(file,formatting_info=True)     所以上面获取合并的单元格数组为空:print(sheet1_by_name.merged_cells)   #返回[]空列表    '''    print(sheet1_by_name.merged_cells)      '''merged_cells返回的这四个参数的含义是:(row,row_range,col,col_range),    其中[row,row_range)包括row,不包括row_range;col也是一样    (1, 3, 4, 5)的含义是:第1到2行(不包括3)合并,(7, 8, 2, 5)的含义是:第2到4列合并。    '''    #利用上述原理,可以分别获取合并的二个单元格的内容:    merged_cells = sheet1_by_name.merged_cells    for cell in merged_cells:        print('cell合并值:', sheet1_by_name.cell(cell[0],cell[2]).value)if __name__ == '__main__':    file = 'example_excel.xls'    read_excel(file)
(0)

相关推荐