借助第三方库实现读取/修改excel表格内的数据:常见的为 xlrd 和 openpyxl
只是读取excel的数据:xlrd,需要读取/写入数据:openpyxl,所以选择用openpyxl
# 安装第三方库
pip install openpyxl
流程
正常打开一个excel文件的流程:找到文件-双击打开-选择某个表-进行添加/修改-修改/写入就保存文件/只读取就不管-不用了就关闭
from openpyxl import load_workbook
# 找到文件,双击打开文件
workbook = load_workbook(filename="我是文件名.xlsx")
# 选择表名为Sheet1的表
# 指定表名获取表对象
sheet = workbook["Sheet1"]
# 通过索引获取表对象,0开始
sheet = workbook[0]
# 选中某个单元格
cells = sheet ["A1"]
# 获取对应单元格的数据(如果有)
values = cells.value
# 修改/写入就保存文件
workbook.save(filename="我是文件名.xlsx")
# 添加/修改结束了要关掉文件
workbook.close()
写入/修改数据
from openpyxl import load_workbook
workbook = load_workbook(filename="我是文件名.xlsx")
# 存在即修改,不存在则为写入
# 方式一:通过位置,指定单元格插入
sheet ["A1"] = "写入的内容"
# 方式二:通过坐标,某一行某一列获取位置插入
sheet.cell(row=2, column=1,value="写入的内容") // sheet.cell(row=2, column=1).value="写入的内容"
workbook.save(filename="我是文件名.xlsx")
workbook.close()
插入行列,删除行列
from openpyxl import load_workbook
workbook = load_workbook(filename="我是文件名.xlsx")
sheet = workbook["Sheet1"]
# 在第6行的位置插入1行
sheet.insert_rows(6)
# 两个参数
# 在第几行插入:idx
# 插入多少行:amount默认等于1
# 在第6行的位置插入4行
sheet.insert_rows(idx=6,amount=4)
# 插入列同理
# 在第6列的位置插入1行
sheet.insert_cols(6)
# 在第6列的位置插入4行
sheet.insert_cols(idx=6,amount=4)
# 删除行
sheet.delete_rows(idx=6, amount=1)
# 删除列
sheet.delete_cols(idx=6, amount=1)
workbook.save(filename="我是文件名.xlsx")
workbook.close()
获取所有表名
from openpyxl import load_workbook
workbook = load_workbook(filename="我是文件名.xlsx")
workbook_list = wb_obj.sheetnames # 列表形式返回
for sheet in workbook_list :
print(sheet)
最大最小行列
print(sheet.max_row)
print(sheet.min_row)
print(sheet.max_column)
print(sheet.min_column)
行列切片读取数据
通过注释可得:
从excel表中按行生成单元格。使用行和列的索引指定循环范围。
如果未指定参数,则范围从A1开始。
如果工作表中没有单元格,将返回空元组。
返回一个内容对象
from openpyxl import load_workbook
wb = load_workbook(filename="./biao.xlsx")
sh = wb["sheet1"]
# 默认情况
print(sh.iter_rows())
# <generator object Worksheet._cells_by_row at 0x00000243933DCD48>
wb.close()
-----------------------------------------
from openpyxl import load_workbook
wb = load_workbook(filename="./biao.xlsx")
sh = wb["sheet1"]
# 转成一个容易理解的内容
print(list(sh.iter_rows()))
[(<Cell 'login'.A1>, <Cell 'login'.B1>, <Cell 'login'.C1>)]
wb.close()
-----------------------------------------
from openpyxl import load_workbook
wb = load_workbook(filename="./biao.xlsx")
sh = wb["sheet1"]
# 将数据可视化,默认为values_only=False
print(list(sh.iter_rows(values_only=True)))
[('id', 'name', 'age')]
wb.close()
列切片也是如此,只需要将 iter_rows替换成 iter_cols 即可
修改文字的大小颜色字体等
from openpyxl import load_workbook
from openpyxl.styles import Font,colors
wb = load_workbook(filename="./biao.xlsx")
sh = wb["sheet1"]
# 指定单元格字体颜色,
sheet['A1'].font = Font(
color=colors.RED, # 设置颜色
size=66, # 设置大小
bold=True, # 设置是否加粗
italic=True # 设置是否倾斜
)
"""
除此之外还有许多可以进行设置,以下为Font类方法中init方法
def __init__(self, name=None, sz=None, b=None, i=None, charset=None,
u=None, strike=None, color=None, scheme=None, family=None, size=None,
bold=None, italic=None, strikethrough=None, underline=None,
vertAlign=None, outline=None, shadow=None, condense=None,
extend=None):
有许多参数均可以调整使用,主题,下划线等
"""
封装一个读取excel表格数据的方法
from openpyxl import load_workbook
wb = load_workbook(filename="./biao.xlsx")
sh = wb["sheet1"]
# 将数据可视化,默认为values_only=False
data = list(sh.iter_rows(values_only=True))
print(data)
# [('id', 'name', 'age'), (1, '张三', 33), (2, '李四', 44), (3, '王五', 55)]
wb.close()
封装方法:
class ReadExcel:
def __init__(self,FileName):
self.workbook = load_workbook(filename=FileName)
def read_execl(self, SheetName):
try:
sheet = self.workbook[SheetName]
datas = list(sheet.iter_rows(values_only=True))
# 这里可以对数据进行处理,根据使用需求自行处理
return datas
except Exception as e:
print(f"读取{SheetName}表有误", e)
finally:
self.workbook.close()