【学习记录】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.

物联沃分享整理
物联沃-IOTWORD物联网 » 【学习记录】python-Excel文件读写操作

发表回复