写点什么

2022 之 Python 操作 Excel,xlrd 与 xlwt 模块一文掌握

作者:梦想橡皮擦
  • 2022 年 5 月 04 日
  • 本文字数:2109 字

    阅读完需:约 7 分钟

Python 操作 Excel

本篇博客为你介绍一种 Python 操作 Excel 的办法,核心用到 xlrd 与 xlwt 模块。


  • xlrd 用于读 excel

  • xlwt 用于写 excel


模块安装比较简单


pip install  xlrd,xlwt
复制代码


正式开始前还需要了解一下 Excle 中的三大对象


  • WorkBook:工作簿对象

  • Sheet:表对象

  • Cell:单元格对象


这里 WorlBook 表示的是整个 Excel 文件, Sheet 表示的是 Excel 中的 Sheet, Cell 就是每个单元格。


常用单元格( Cell )中的数据类型


  1. empty(空的)

  2. string(text)

  3. number

  4. date

  5. boolean

  6. error

  7. blank(空白表格)

打开 Excel 文件读取数据

提前准备一个 Excel 表格,用作测试使用。



直接看代码即可


import xlrddata = 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个参数是指单元格是否允许重设置,默认为Falsesheet = 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个参数是指单元格是否允许重设置,默认为Falsesheet = 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, '合并单元格')
复制代码


发布于: 刚刚阅读数: 2
用户头像

爬虫 100 例作者,蓝桥签约作者,博客专家 2021.02.06 加入

6 年产品经理+教学经验,3 年互联网项目管理经验; 互联网资深爱好者; 沉迷各种技术无法自拔,导致年龄被困在 25 岁; CSDN 爬虫 100 例作者。 个人公众号“梦想橡皮擦”。

评论

发布
暂无评论
2022 之Python操作 Excel,xlrd 与 xlwt 模块一文掌握_5月月更_梦想橡皮擦_InfoQ写作社区