Python中xlrd、xlwt、xlutils模块,实现在Excel读取和写入数据

python操作excel的三个工具包如下,注意,只能操作.xls,不能操作.xlsx

  • xlrd: 对excel进行读相关操作
  • xlwt: 对excel进行写相关操作
  • xlutils: 对excel读写操作的整合

这三个工具包都可以直接使用pip进行下载:

  • sudo pip install xlrd
  • sudo pip install xlwt
  • sudo pip install xlutils

xlwt的缺陷

xlwt只能创建一个全新的excel文件,然后对这个文件进行写入内容以及保存。

但是大多数情况下我们希望的是读入一个excel文件,然后进行修改或追加,这个时候就需要xlutils了。


资料准备阶段:



一.读取excel里面的数据内容(包含sheet名、每一行、每一列内容、某个单元格的内容)

# -*- coding: utf-8 -*-
import xlrd
from datetime import date,datetime


def read_excel():
    # 打开文件
    workbook = xlrd.open_workbook(r'D:\MyProjects\APITest\XLRD_TEST.xlsx')

    # 获取所有sheet
    print(workbook.sheet_names())
    sheet2_name = workbook.sheet_names()[1]
    print(sheet2_name)

    # 根据sheet索引或者名称获取sheet内容
    sheet1 = workbook.sheet_by_index(0)
    sheet2 = workbook.sheet_by_name('详细信息')

    # sheet的名称,行数,列数
    print(sheet1.name, sheet2.nrows, sheet2.ncols)

    # 获取整行和整列的值(数组)
    rows = sheet2.row_values(3)  # 获取第四行内容
    cols = sheet2.col_values(2)  # 获取第三列内容

    print(rows)
    print(cols)

    # 获取单元格内容
    print(sheet2.cell(1, 0).value)
    print(sheet2.cell_value(1, 0))
    print(sheet2.row(1)[0].value)
  • ['基本信息', '详细信息']
  • 详细信息
  • 基本信息 8 6
  • ['小明', 'H5', '北京', 18501234567.0, '552eabaa', '41062119850531752X']
  • ['住址', '上海', '上海', '北京', '北京', '广州', '深圳', '海南']
  • 小杰
  • 小杰
  • 小杰

二.excel里面的数据类型分类:通过ctype属性获取数据类型


# 获取单元格内容的数据类型
print(sheet1.cell(1, 0).ctype)                           # 获取(2,1)单元格的类型,2行第1print(sheet1.cell(1, 0).value)

print(sheet1.cell(1, 1).ctype, sheet1.cell(1, 1).value)  # 获取数据类型和里面的值
print(sheet1.cell(1, 2).ctype, sheet1.cell(1, 2).value)  # 直接获取日期数据,会变成其他数据格式
print(sheet1.cell(1, 3).ctype, sheet1.cell(1, 3).value)  # 数据类型为0,值为空,就没有任何数据
  • 1
  • 小杰
  • 2 24.0
  • 3 43187.0
  • 0                     此处因为是空单元格,所以没打印任何东西

三.读取日期格式的数据,首先需要引入xldate_as_tuple函数

from xlrd import xldate_as_tuple

xldate_as_tuple(d,0)         #d  是从excel中读取出来的浮点数

第二个参数:            有两种取值,0是以1900-01-01为基准的日期,而1是1904-01-01为基准的日期

该函数返回的是一个元组,他的值类似:(year, month, day, hour, minute, nearest_second)


# 获取日期数据,需要先把日期转换为元祖,把每个字段都拆分成元祖
# 先获取这个单元格的对象,然后把这个对象转换成元祖
ori_value = sheet1.cell_value(1, 2)
data_value = xlrd.xldate_as_tuple(ori_value, 0)
print(data_value)

# 根据如上原始的元祖截取字符串组成时间格式
print(date(*data_value[:3]))
# 自定义时间字符串
date_tmp = date(*data_value[:3]).strftime('%Y/%m/%d')
print(date_tmp)
  • (2018, 3, 28, 0, 0, 0)
  • 2018-03-28
  • 2018/03/28

四.读取合并的单元格数据


print(sheet1.cell(1, 4).ctype, sheet1.cell(1, 4).value)  # 合并的单元格最上角的一个单元格才有数据
print(sheet1.cell(2, 4).ctype, sheet1.cell(2, 4).value)  # 其余的单元格都没有数据

  • 1 好朋友

五.xlutils的简单实用


目前希望打开某个excel文件,然后写入内容

# excel
def write_excel():
    # 读取一个excel文件
    rd_excel = open_workbook("D:\MyProjects\APITest\XLWT_TEST.xls")
    # xlrd的对象转化为xlwt的对象
    new_excel = copy(rd_excel)
    # 获得要操作的sheet
    table = new_excel.get_sheet(0)
    # 准备要输入的内容
    values = ['小明','小李','Lily','Toms','小王']

    # xlwt对象的写方法,参数分别是行、列、值
    table.write(1, 0, values[0])
    table.write(2, 0, values[1])
    table.write(3, 0, values[2])
    table.write(4, 0, values[3])
    table.write(5, 0, values[4])

    # xlwt对象的保存方法,这时便覆盖掉了原来的excel
    new_excel.save("D:\MyProjects\APITest\XLWT_TEST.xls")

最终效果:最初无论设置什么格式或者行高,在程序输入内容之后,都会保存为默认的字体大小和行高

六.如何使用xlwt设置excel里面的字体的style

from xlrd import open_workbook
from xlutils.copy import copy
import xlwt

def set_style(name, height, bold=False):
    style = xlwt.XFStyle()  # 初始化样式

    font = xlwt.Font()      # 为样式创建字体
    font.name = name        # 定义具体的字体

    font.bold = bold        # 定义是否加粗
    font.color_index = 4    # 定义字体颜色
    font.height = height    # 定义字体高度

    style.font = font       # 最终把自定义的字体,定义到风格里面
    return style

# excel
def write_excel():
    # 读取一个excel文件
    rd_excel = open_workbook("D:\MyProjects\APITest\XLWT_TEST.xls")
    # xlrd的对象转化为xlwt的对象
    new_excel = copy(rd_excel)
    # 获得要操作的sheet
    table = new_excel.get_sheet(0)
    # 准备要输入的内容
    values = ['小明','小李','Lily','Toms','小王']

    # xlwt对象的写方法,参数分别是行、列、值
    table.write(1, 0, values[0], set_style('微软雅黑', 300 ,True))
    table.write(2, 0, values[1], set_style('Arial', 100 ,True))
    table.write(3, 0, values[2], set_style('微软雅黑', 400 ,False))
    table.write(4, 0, values[3], set_style('宋体', 200 ,True))
    table.write(5, 0, values[4], set_style('Arial', 300 ,False))

    # xlwt对象的保存方法,这时便覆盖掉了原来的excel
    new_excel.save("D:\MyProjects\APITest\XLWT_TEST.xls")


if __name__ == '__main__':
    write_excel()


猜你喜欢

转载自blog.csdn.net/chenmozhe22/article/details/79724920