Python 操作 Excel
本篇博客为你介绍一种 Python 操作 Excel 的办法,核心用到 xlrd 与 xlwt 模块。
xlrd
用于读 excel;
xlwt
用于写 excel。
模块安装比较简单
正式开始前还需要了解一下 Excle 中的三大对象
WorkBook
:工作簿对象
Sheet
:表对象
Cell
:单元格对象
这里 WorlBook
表示的是整个 Excel 文件, Sheet
表示的是 Excel 中的 Sheet, Cell
就是每个单元格。
常用单元格( Cell
)中的数据类型
empty(空的)
string(text)
number
date
boolean
error
blank(空白表格)
打开 Excel 文件读取数据
提前准备一个 Excel 表格,用作测试使用。
直接看代码即可
import xlrd
data = xlrd.open_workbook('测试表格.xlsx') # filename 表示文件名以及路径
print(data)
# 输出
# <xlrd.book.Book object at 0x00000272DE9276A0>
复制代码
注意最新版的 xlrd
模块已经不支持 xlsx
文件了,如果希望支持该文件格式,请使用如下版本 xlrd
。
pip uninstall xlrd # 卸载当前版本
pip install xlrd==1.2.0 # 安装1.2.0版本
复制代码
获取 Excel 中的 Sheet
import xlrd
data = xlrd.open_workbook('测试表格.xlsx') # filename 表示文件名以及路径
table = data.sheets()[0] # 通过索引顺序获取
print(table)
table = data.sheet_by_index(1) # 通过索引顺序获取
sheet_name = '测试1'
table = data.sheet_by_name(sheet_name) # 通过 Sheet 名称获取
print(table)
复制代码
以上方法返回的是 xlrd.sheet.Sheet()
对象。如果不存在 Sheet
,或者名称写错,则出现如下 BUG
xlrd.biffh.XLRDError: No sheet named <'测试1'>
复制代码
调用工作簿对象的 sheet_names()
方法,可以返回工作簿的所有 sheet 页名字。
import xlrd
data = xlrd.open_workbook('测试表格.xlsx') # filename 表示文件名以及路径
sheet_names = data.sheet_names()
print(sheet_names)
复制代码
使用该方法优先获取所有的 sheet_name
,可以防止调非法名称。
行的操作
import xlrd
data = xlrd.open_workbook('测试表格.xlsx') # filename 表示文件名以及路径
table = data.sheet_by_index(0)
nrows = table.nrows # 获取该sheet中的有效行数
print(nrows)
复制代码
获取第一行内容
import xlrd
data = xlrd.open_workbook('测试表格.xlsx') # filename 表示文件名以及路径
sheet = data.sheet_by_index(0)
nrows = sheet.nrows # 获取该sheet中的有效行数
row_data = sheet.row_values(0) # 获取第1行的内容
print(row_data)
复制代码
获取所有行数据
import xlrd
data = xlrd.open_workbook('测试表格.xlsx') # filename 表示文件名以及路径
sheet = data.sheet_by_index(0)
nrows = sheet.nrows # 获取该sheet中的有效行数
for i in range(nrows):
print(sheet.row_values(i)) # 获取第几行的数据
复制代码
返回由该列中所有的单元格对象组成的列表
import xlrd
data = xlrd.open_workbook('测试表格.xlsx') # filename 表示文件名以及路径
sheet = data.sheet_by_index(0)
print(sheet.row_slice(0))
# 输出
# [text:'姓名', text:'班级', text:'年龄']
复制代码
其余内容参考代码查看即可
# 返回由该行中所有单元格的数据类型组成的列表
sheet .row_types(行索引, start_colx=0, end_colx=None)
# 返回由该行中所有单元格的数据组成的列表
sheet .row_values(行索引, start_colx=0, end_colx=None)
# 返回该列的有效单元格长度
sheet .row_len(行索引)
复制代码
列的操作
获取有效列数
import xlrd
data = xlrd.open_workbook('测试表格.xlsx') # filename 表示文件名以及路径
sheet = data.sheet_by_index(0)
ncols = sheet.ncols #获取列表的有效列数
print(ncols)
复制代码
单元格操作
获取单元格内容cell(rowx, colx)
:获取 sheet 对象中第 rowx 行,第 colx 列的单元对象, 返回值的格式为 单元类型:单元值
。
import xlrd
data = xlrd.open_workbook('测试表格.xlsx') # filename 表示文件名以及路径
sheet = data.sheet_by_index(0)
data = sheet.cell(2, 1)
print(data)
复制代码
获取单元格的值
data = sheet.cell_value(2, 1)
print(data)
复制代码
xlwt 模块(操作 .xls
文件进行写操作)使用说明在注释直接查看即可。
import xlwt
xl = xlwt.Workbook(encoding='utf-8')
# 创建1个sheet对象,第2个参数是指单元格是否允许重设置,默认为False
sheet = xl.add_sheet('测试', cell_overwrite_ok=True)
# 第1个参数代表行,第2个参数是列,第3个参数是内容,第4个参数是格式
sheet.write(0, 0, '姓名')
sheet.write(0, 1, '年纪')
xl.save('橡皮擦的测试.xls')
复制代码
设置单元格样式的基本用法
import xlwt
xl = xlwt.Workbook(encoding='utf-8')
# 创建1个sheet对象,第2个参数是指单元格是否允许重设置,默认为False
sheet = xl.add_sheet('测试', cell_overwrite_ok=False)
# 初始化样式
style = xlwt.XFStyle()
# 为样式创建字体
font = xlwt.Font()
font.name = 'Arial Black'
style.font = font
# 第1个参数代表行,第2个参数是列,第3个参数是内容,第4个参数是格式
sheet.write(0, 0, '姓名')
sheet.write(0, 1, '年纪', style)
xl.save('橡皮擦的测试.xls')
复制代码
合并单元格
# 合并 第1行到第2行 的 第1列到第2列
sheet.write_merge(1, 2, 1, 2, '合并单元格')
复制代码
评论