python操作excel的三个工具包如下,注意,只能操作.xls
,不能操作.xlsx
。
xlrd
: 对excel进行读相关操作xlwt
: 对excel进行写相关操作xlutils
: 对excel读写操作的整合这三个工具包都可以直接使用pip进行下载:
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)
['基本信息', '详细信息']
二.excel里面的数据类型分类:通过ctype属性获取数据类型
# 获取单元格内容的数据类型
print(sheet1.cell(1, 0).ctype) # 获取(2,1)单元格的类型,2行第1列
print(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,值为空,就没有任何数据
三.读取日期格式的数据,首先需要引入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)
四.读取合并的单元格数据
五.xlutils的简单实用
目前希望打开某个excel文件,然后写入内容
最终效果:最初无论设置什么格式或者行高,在程序输入内容之后,都会保存为默认的字体大小和行高
六.如何使用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()