【学习记录】python-Excel文件读写操作
参考教程:读写Excel – 白月黑羽
学习记录用,如有错误欢迎指正~
一、openpyxl
主要用于读写修改文件,较为常用
1.打开Excel文件
load_workbook()方法
book = openpyxl.load_workbook('新建表.xlsx')
sheet = book.worksheets[1]
2.读取
2.1读指定单元格
直接定位单元格:
cell = sheet['A1'] # 获取A1单元格的内容
根据行号列号定位单元格:
cell = sheet.cell(column=1, row=1) # 根据行号列号,获取A1的内容,索引是从1开始
返回的是cell是这个类型:
要获取单元格内容用value属性:
cellValue = cell.value # 获取单元格内容
2.2读取行和列
openpyxl里面没有直接获取的,教程(读写Excel – 白月黑羽 (byhy.net))中给了两个自己写的方法:
# 白月黑羽教程开发的获取 指定行 里面的数据
# rowx 为行号; start_colx,end_colx 分别为起止列号
def row_values(sheet, rowx, start_colx=None, end_colx=None):
return next(sheet.iter_rows(
min_row=rowx, max_row=rowx,
min_col=start_colx, max_col=end_colx,
values_only=True))
# 白月黑羽教程开发的函数,获取 指定列 里面的数据
# rowx 为列号; start_rowx, end_rowx 分别为起止行号
def col_values(sheet, colx, start_rowx=None, end_rowx=None):
return next(sheet.iter_cols(
min_col=colx, max_col=colx,
min_row=start_rowx, max_row=end_rowx,
values_only=True))
尝试使用后注意到:
1. 返回的是元组,start_colx默认1,end_colx默认5
2. 行列从1开始
3.用到了内置函数next(iterator):一个一个去取元素;iterator迭代器对象
补充:
iter_rows()方法:
def iter_rows(
self, min_row: int | None, max_row: int | None, min_col: int | None, max_col: int | None, values_only: Literal[True]
) -> Generator[tuple[str | float | datetime | None, ...], None, None]: ...
说明函数是一个生成器Generator(一遍循环一遍计算的机制),返回类型是tuple
-> 表示 为函数添加元数据,描述函数的返回类型(参考博客:python中->是什么意思_python ->-CSDN博客)
3.写
3.1新建excel文件、表单
新建文件:
import openpyxl
book = openpyxl.Workbook()
# print(book)
book.save('新建表.xlsx')
保存后,会在当前目录下新建一个表,并且会自动生成一个表单sheet
新建表单:create_sheet()方法
title:sheet名;index:添加的位置,默认是添加到最后,索引从0开始
修改表单名:title属性
sheet.title = '修改后的表单名'
3.2修改单元格内容
获取到单元格内容后直接赋值修改,修改后要save保存
sheet['A1'] = '修改内容' # 直接修改了
sheet.cell(column=2, row=2).value = 'B2修改后的内容' # 需要加value
为什么第一种方式可以直接修改,不用加value?(补)
3.3插入/删除行、列
sheet 对象的 insert_rows
和 insert_cols
方法:(修改后要save保存)
默认插入1行
删除用sheet 对象的 delete_rows
和 delete_cols
方法:(修改后要save保存)
二、xlrd(版本v1.2.0可以支持xlsx,最新版本只支持xls)
主要用于读取文件,不支持修改
1.open_workbook(),打开Excel文件
book = xlrd.open_workbook(filename='test.xlsx') # 获取文件对象
2.读取
2.1读取表单、表单名、表单数量
sheets = book.sheets() # 读取所有表单
sheet = book.sheet_by_name(sheet_name='sheetname') # 通过表单名字读取指定表单
sheet = book.sheet_by_index(0) # 通过索引读取指定表单,索引从0开始
获取文件表单名字的方法:
print(f'表单名字:{book.sheet_names()}')
获取文件表单数量的方法:
print(f'表单数量:{book.nsheets}')
2.2读取表单单元格内容
行号和列号都是从0开始
指定单元格:
A1 = sheet.cell_value(rowx=0, colx=0) # 通过行号列号,获取指定单元格数据
指定行:
r1 = sheet.row_values(rowx=0) # 读取表格中行号为1的数据
其中可以用start_colx,end_colx 参数指定列范围
指定列:
c1 = sheet.col_values(colx=0) # 读取表格中列号为A的数据
其中可以用start_rowx,end_rowx参数指定行范围
作者:Ryrie.