前言※
在 python 中有许多中操作 excel 的方式,pandas 无疑是最好用的,但是在平时写一些小工具时用其他小型包也够了。本篇介绍一下 xlutis、xlrd、xlwt 的一些基本操作。
正文※
xlrd※
单元格中的数据类型※
empty、string、number、date、boolean、error、blank
常用函数※
import xlrd
import datetime
data = xlrd.open_workbook('excel.xlsx')
#读取路径,指向该路径上 excel 表格
#sheet 的操作
table=data.sheets()[0]
#通过索引获取
table=data.sheet_by_index(0)
#通过索引获取
table=data.sheet_by_name('sheet1')
#通过名字获取
#以上三个函数返回一个 xlrd.sheet.Sheet()对象
names=data.sheet_names()
#返回 book 中所有工作表的名字
data.sheet_loaded(name or index)
#检查工作簿是否已经导入,已导入返回 true,未导入报错 xlrd.biffh.XLRDError
#对行、列的操作
table.nrows
#返回工作簿的有效行数(有数据的行就会被计入)
table.row(rowx)
#返回由该行中所有的单元格对象组成的列表 列表每个值的内容为: 单元类型:单元数据
table.row_slice(rowx,start_colx,end_colx)
#返回该列中从第[start_colx]到[end_colx]的单元格对象组成的列表
table.row_len(rows)
#返回该行的有效单元格长度(包括 empty)
table.row_types(rows,start_colx,end_colx)
#返回该行单元类型组成的列表 0:empty 1:string 2:number 3:data 4:boolean 5:error
table.row_values(rows,start_colx,end_colx)
#返回该行的数据所组成的列表
#对单元格的操作
table.cell(rowx, colx)
#返回 [rowx,colx]的单元对象
table.cell_value(rowx, colx)
#返回 [rowx,colx]的值
table.cell_type(rowx, colx)
#返回[rowx,colx]的类型
#读取单元格内容为日期/时间的方式
date_tuple=xlrd.xldate_as_tuple(cell_value,data.datemode)
#若 cell_value 为时间,则将其转化为适用于 datetime 的元组
date_value=datetime.date(*date_tuple[:3])
#转化为 2019-02-07
date_value.strftime('%Y%m%d')
#转化为 2019/02/07 格式
#对合并单元格的操作
table.merged_cells
#列出合并单元格和的信息,返回值为元组(包含坐标信息)的列表,无合并单元格返回空列表
table.cell_value(rowx_start,col_start)
#读取合并单元格的数据
xlutis※
xlutis 是为了解决 xlwt 不能向已有数据的 excel 表格写入数据的局限性。主要使用的是 xlutis.copy.copy 方法,但是也有弊端,比如表格内的图片等内容不能复制。
file_path = os.path.dirname(os.path.realpath(sys.executable))+'\\'+book
book = xlrd.open_workbook(file_path,formatting_info=True) # 读取 Excel
# 复制表
copy_book = xlutils.copy.copy(book) #复制为 xlwt 可用的表
copy_sheet = copy_book.get_sheet(sheetname)
xlwt※
xlwt 是一个比较简便的操作 Excel 表格的工具包,处理一些日常表格需求完全足够了。
创建新表格※
import xlwt
workbook=xlwt.Workbook()
sheet = workbook.add_sheet('sheet', cell_overwrite_ok=True)
#cell_overwrite_ok 默认为 false,改为 true 将支持多次重写
sheet.col(0).width = 256 * 15
# 设置第一列的宽度为 15,宽度的基本单位为 256.所以设置的时候一般用 256 × 需要的列宽。sheet.row(0).height_mismatch = True
sheet.row(0).height = 20 * 40
# 设置行高为可以修改,并修改为 40,行高的基本单位为 20,设置同行高。workbook.save('Excel.xls')
设置字体样式※
style=xlwt.XFStyle()
#初始化一个样式对象
font=xlwt.Font()
#创建字体样式
font.name="Simsun"
#使用什么字体
font.height=20*11
#Excel 中字体大小对应的是 11
font.bold=False
#字体是否加粗
font.underline=True
#是否有下划线
font.italic = True
#是否倾斜字体
font.colour_index = 0x01
#设置字体颜色
style.font=font
#设定为 style 中的样式
设置单元格样式※
- 设置对齐方式
#设置单元格居中
al1=xlwt.Alignment()
al1.horz=0x02
al1.vert=0x01
style.alignment=al1
sheet.write(0,0,'al1 居中方式',style)
#也可直接赋值
style.alignment.vert=0x01
style.alignment.horz=0x02
#单元格对齐方式
VERT_TOP = 0x00 上端对齐
VERT_CENTER = 0x01 居中对齐(垂直方向上)
VERT_BOTTOM = 0x02 低端对齐
HORZ_LEFT = 0x01 左端对齐
HORZ_CENTER = 0x02 居中对齐(水平方向上)
HORZ_RIGHT = 0x03 右端对齐
在单元格设置超链接或公式等内容
#在(0,0)中插入谷歌的超链接,并且在单元格内显示「Google」
sheet.write(0, 0, xlwt.Formula('HYPERLINK("http://www.google.com";"Google")'))
#添加其他表格的超链接
sheet.write(0, 0, xlwt.Formula('HYPERLINK("./test.xls";"test")'))
#添加公式
sheet.write(2, 0, xlwt.Formula('SUM(A1,A2)'))
写入日期
#写入日期
style.num_format_str='M/D/YY'
sheet.write(2, 0, datetime.datetime.now(),style)
设置单元格背景颜色
#设置单元格背景颜色
pattern.pattern = xlwt.Pattern()
pattern.pattern=SOLID_PATTERN
pattern.pattern_fore_colour=1
#颜色映射表见上
style.pattern=pattern
设置单元格边框
borders=xlwt.Borders()
borders.left=xlwt.Borders.DASHED
#DASHED 虚线
#NO_LINE 没有
#THIN 实线
#left 左 right 右 top 上 bottom 下
#设置边框颜色
borders.left_colour
合并单元格
#write_merge(row,row+m,col,col+m,'lable',style)
隐藏某列某行
sheet.row(i).hidden
=0 显示
=1 隐藏
设置页面布局※
copy_sheet.portrait = False
false 横向
true 纵向
去除页眉页脚※
copy_sheet.show_headers = False
copy_sheet.header_str = b''
copy_sheet.footer_str = b''