2022 之Python操作 Excel,xlrd 与 xlwt 模块一文掌握【月更第一篇】

举报
梦想橡皮擦 发表于 2022/03/02 09:32:27 2022/03/02
【摘要】 Python 操作 Excel本篇博客为你介绍一种 Python 操作 Excel 的办法,核心用到 xlrd与xlwt模块。xlrd 用于读 excel;xlwt 用于写 excel。模块安装比较简单pip install xlrd,xlwt正式开始前还需要了解一下 Excle 中的三大对象WorkBook:工作簿对象Sheet:表对象Cell:单元格对象这里 WorlBook 表示的...

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 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, '合并单元格')

记录时间

2022年度 Flag,写作的 575 / 1024 篇。
可以关注我,点赞我、评论我、收藏我啦。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。