python读写excel表格

Python操作excel主要用到xlrd和xlwt两个库。
xlrd:读excel表格,即读取excel表格的数据,转换成pthon对象。
xlwt:写excel表格,即由python对象生成excel表格。

xlrd常用API

  • 导入xlrd包
    import xlrd
  • 打开excel文件
    workbook = xlrd.open_workbook(‘simple.xls’)
    xlrd.open_workbook()方法返回的是xlrd.Book对象,携带了该工作簿的所有信息。workbook即xlrd.Book的一个对象。
    当然,根据官方的python-excel文档,Workbook对象的打开方式可以是文件mmap.mmap对象或字符串

    mmap.mmap对象或字符串都添加到open_workbook()方法的file_contents属性中
    mmap.mmap对象或字符串都添加到open_workbook()方法的file_contents属性中。

  • 获取sheet

    • 获取所有sheet
      sheets = workbook.sheets()
      返回一个列表,常用于遍历,如 for s in workbook.sheets():
    • 获取名字列表
      workbook.sheet_names()
      返回此workbook中所有sheet的名字列表。
    • 获取单个sheet
      • 按索引
        sheet1 = workbook.sheet_by_index(index)
        xlrd.Book.nsheets属性表示了工作簿里的sheet的个数,索引index的范围正是[0,nsheets-1]。
      • 按名字
        sheet1 = workbook.sheet_by_name(name)
        :这里的sheet1是通过以上两种方法得到的sheet对象(即xlrd.sheet.Sheet类),对象名叫sheet1。后面的sheet1均指这里得到的sheet对象。
  • 获取sheet的属性
    • 名称
      sheet1.name
    • 行列数
      sheet1.nrows
      sheet1.ncols
    • 整行值
      rows = sheet1.row_values(3) # 获取第四行内容
      或者
      row = sheet1.row_slice(3,0) #从第四行的索引为0的位置开始获取行的内容,直至行末。
      对比:
      row = sheet1.row_slice(3,2,7) #从第四行的索引为2的位置开始获取行的内容,直至索引为6的位置。
      :这里的row_slice()、col_slice()两方法不能指定分片的步数,只能按顺序逐个读取,无法跳跃地读取。
    • 整列值
      cols = sheet1.col_values(2) # 获取第三列内容

:关于行和列的操作,官方文档描述如下:
这里写图片描述

  • 获取单元格值
    cell()方法返回一个xlrd.sheet.Cell类对象。
    三种方式均可:
    sheet1.cell(1,0).value.encode(‘utf-8’)
    sheet1.cell_value(1,0).encode(‘utf-8’)
    sheet1.row(1)[0].value.encode(‘utf-8’)

  • 单元格内容的类型
    sheet1.cell(row,col).ctype
    python读取excel中单元格的内容返回的有5种类型,即ctype有以下5种取值:

    • 0:empty
    • 1:string
    • 2:number
    • 3:date
    • 4:boolean
    • 5:error

下面给出一个使用示例:
这里写图片描述

  • 读取单元格中的日期
    首先判断ctype是否等于3,如果为3,则用时间格式处理。先使用xlrd.xldate_as_tuple()方法来处理,讲date类型的数据转换成元组。1991/11/11 -> (1991,11,11,0,0,0)
    然后使用date的strftime()方法进行格式化。 (1991,11,11,0,0,0) -> 1991/11/11
if (sheet.cell(row,col).ctype == 3):
  date_value = xlrd.xldate_as_tuple(sheet.cell_value(rows,3),book.datemode)
  date_tmp = date(*date_value[:3]).strftime('%Y/%m/%d')
  • 读取合并单元格中的内容
    这里xlrd并不是很高效,只能从合并单元格的第一个(最左上)单元格中读取值,其他单元格读到的都是空值。
    获取最左上的单元格的方法:
    读取文件时将formatting_info参数设置为True,默认是False。示例如下:
    这里写图片描述
    在读取合并单元格的时候,关于merged_cells中元组的的理解和python的分片一致。
    从上面的结果可以看出,所谓的“最左上”单元格其实由merged_cells返回的row和col的低位构成,于是有:
    这里写图片描述

xlwt常用API

  • 导入包
    import xlwt
  • 创建工作簿
    f = xlwt.Workbook() #不带参数
    返回一个xlwt.Workbook对象

  • 创建sheet
    sheet1 = f.add_sheet(u’sheetName’, cell_overwrite_ok=True)
    可以多次调用f.add_sheet()方法在同一个工作簿中创建多个sheet。

  • 检索sheet
    sheet2 = f.get_sheet(index)
    根据sheet的索引检索。
  • 写入单元格
    sheet1.write(row_index,col_index,contents) #往坐标为(row_index,col_index)的单元格写入数据contents
    或者
    sheet1.row(row_index).write(col_index,contents) #与上面等价
    或者
    sheet1.col(col_index).write(row_index,contents) #与上面等价

    row(index)或col(index)方法既可以检索已存在的行/列,也可以创建不存在的行/列。
    官方文档中示例如下:
    这里写图片描述

  • 保存文件
    f.save(name)

  • 合并单元格,并写入数据
    用到sheet的write_merge(x,x+m,y,y+n,string,style)方法。
    这与xlrd读取合并单元格sheet.merged_cells的方式不一样。 故对参数作如下重点说明:
    • x,y,m,n都是以0开始计数的;
    • x,x+m:合并从第x行开始到x+m行结束的单元格,包括第x+m行;
    • y, y+n: 合并从第y列开始到第y+n列结束的单元格,包括第y+n列。

如:
sheet1.write_merge(1,4,0,0,’Hello’): 合并第1列的第2、3、4、5行(索引1-4),内容为Hello。
sheet1.write_merge(21,21,0,1,’Hello’):合并第22行的第1、2列。

参考资料

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值