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

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

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

这里写图片描述

完整脚本如下:

# -*- coding: utf-8 -*-
"""
Created on Wed Jan 17 15:31:36 2018
excel读取操作脚本
@author: BruceWong
"""

import xlrd

from 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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值