当前位置: 首页 > news >正文

Python利用openpyxl库读取xlsx文件

写在前面

1、openpyxl库读取数据时,默认下标是从1开始,而不是习惯性的从0开始

常用函数

导入openpyxl库

from openpyxl.cell import Cell
from openpyxl.reader.excel import load_workbook
from openpyxl.workbook import Workbook
from openpyxl.worksheet.worksheet import Worksheet

加载xlsx文件

filename = "学生成绩汇总表.xlsx"
wb: Workbook = load_workbook(filename)

获取所有的表格

sheet_names = wb.sheetnames
print(f'⭐所有的表格:{sheet_names}')

选择要操作的表格

1、通过get_sheet_by_name函数获取(不推荐,会触发 DeprecationWarning)

sheet = wb.get_sheet_by_name('表格1')
print(f'⭐当前获取的表格:{sheet}')

2、通过wb[sheetname]的方式获取(推荐)

sheet: Worksheet = wb['表格1']
print(f'⭐当前获取的表格对象:{sheet}')

获取表格的名称

title = sheet.title
print(f'⭐当前的表格名称:{title}')

查看有多少行数据

max_row = sheet.max_row
print(f'⭐表格名称:{sheet.title}, 行数:{max_row}')

查看有多少列数据

max_column = sheet.max_column
print(f'⭐表格名称:{sheet.title}, 列数:{max_column}')

获取某一个单元格数据

1、通过【字母+数字】的方式获取某个单元格

推荐:直观,想读哪个直接读取即可

column = '4'
row = 'C'
index = f'{row}{column}'
cell: Cell = sheet[index]
value = cell.value
print(f"⭐单元格:{index}, 数据:{value}")

2、通过【cell函数】获取某个单元格

不推荐:不直观;下标从1开始,而不是从0开始,容易写错

row = 3  # 第几行, 从1开始
column = 5  # 第几列, 从1开始
cell = sheet.cell(row, column)
value = cell.value
print(f'⭐第{row}行, 第{column}列的数据是:{value}')

按行获取数据,返回一个迭代器

可以获取某一行,也可以获取某一列

如果 min_row==max_row 则获取该行

e.g:获取第3行,则设置如果 min_row=max_row=3

如果 min_col==max_col 则获取该列

e.g:获取第4列,则设置如果 min_col=max_col=4

设置不相同,则获取多行多列数据

设置为max_row=None则自动设置为最大行

设置max_col=None则自动设置为最大列

可以通过设置为None默认获取到最大行/列的数据

min_row = 1  # 起始位置第几行
max_row = 5  # 终止位置第几行
min_col = 3  # 起始位置第几列
max_col = 6  # 终止位置第几列
values_only = True  # 直接显示数据
rows = sheet.iter_rows(min_row, max_row, min_col, max_col, values_only)
print(f"⭐从第{min_row}行到{max_row}行, 第{min_col}列到第{max_col}列, 数据如下:")
for row in rows:print(row)

按列获取数据,返回一个迭代器

与按行获取数据一致,函数由 iter_rows 变成 iter_cols 参数一致

data = sheet.iter_cols(values_only=True)
print("⭐按列获取的数据如下:")
for i in data:print(i)

通过sheet['列名']获取某列

col = 'C'  # 不区分大小写
column = sheet[col]
column_values = list(map(lambda x: x.value, column))
print(f"⭐{col}列的数据为:{column_values}")

获取所有的数据

通过values返回迭代器

本质是调用 iter_rows 来实现,通过设置参数都为None指定所有数据

values = sheet.values
print('⭐所有的数据:')
for v in values:print(v)

例子

1、学生成绩汇总表.xlsx

image-20260507104030365

2、代码

# -*- coding: utf-8 -*-
"""
File Name: main.py
Author: DellUser
Date: 2026/5/6
"""
# 导入openpyxl
from openpyxl.cell import Cell
from openpyxl.reader.excel import load_workbook
from openpyxl.workbook import Workbook
from openpyxl.worksheet.worksheet import Worksheetdef main():# 加载xlsx文件filename = "学生成绩汇总表.xlsx"wb: Workbook = load_workbook(filename)# 获取所有的表格sheet_names = wb.sheetnamesprint(f'⭐所有的表格:{sheet_names}')# 选择要操作的表格# 1.通过get_sheet_by_name函数获取# 不推荐,会触发 DeprecationWarningsheet = wb.get_sheet_by_name('表格1')print(f'⭐当前获取的表格:{sheet}')# 2.通过wb[sheetname]的方式获取(推荐)sheet: Worksheet = wb['表格1']print(f'⭐当前获取的表格对象:{sheet}')# 获取表格的名称title = sheet.titleprint(f'⭐当前的表格名称:{title}')# 查看有多少行数据max_row = sheet.max_rowprint(f'⭐表格名称:{sheet.title}, 行数:{max_row}')# 查看有多少列数据max_column = sheet.max_columnprint(f'⭐表格名称:{sheet.title}, 列数:{max_column}')# 获取某一个单元格数据# 1.通过【字母+数字】的方式获取某个单元格# 推荐:直观,想读哪个直接读取即可column = '4'row = 'C'index = f'{row}{column}'cell: Cell = sheet[index]value = cell.valueprint(f"⭐单元格:{index}, 数据:{value}")# 2.通过【cell函数】获取某个单元格# 不推荐:不直观;下标从1开始,而不是从0开始,容易写错row = 3  # 第几行, 从1开始column = 5  # 第几列, 从1开始cell = sheet.cell(row, column)value = cell.valueprint(f'⭐第{row}行, 第{column}列的数据是:{value}')# 按行获取数据,返回一个迭代器# 可以获取某一行,也可以获取某一列# 如果 min_row==max_row 则获取该行# e.g:获取第3行,则设置如果 min_row=max_row=3# 如果 min_col==max_col 则获取该列# e.g:获取第4列,则设置如果 min_col=max_col=4# 设置不相同,则获取多行多列数据min_row = 1  # 起始位置第几行max_row = 5  # 终止位置第几行min_col = 3  # 起始位置第几列max_col = 6  # 终止位置第几列values_only = True  # 直接显示数据rows = sheet.iter_rows(min_row, max_row, min_col, max_col, values_only)print(f"⭐从第{min_row}行到{max_row}行, 第{min_col}列到第{max_col}列, 数据如下:")for row in rows:print(row)# 按列获取数据,返回一个迭代器# 与按行获取数据一致,函数由 iter_rows 变成 iter_cols 参数一致data = sheet.iter_cols(values_only=True)print("⭐按列获取的数据如下:")for i in data:print(i)# 通过sheet['列名']获取某列col = 'C'  # 不区分大小写column = sheet[col]column_values = list(map(lambda x: x.value, column))print(f"⭐{col}列的数据为:{column_values}")# 获取所有的数据# 通过values返回迭代器# 本质是调用 iter_rows 来实现values = sheet.valuesprint('⭐所有的数据:')for v in values:print(v)if __name__ == "__main__":main()

3、gitee url

learn_openpyxl · 南风丶轻语/python-learning-notes - 码云 - 开源中国

http://www.jsqmd.com/news/770299/

相关文章:

  • 从八人抢答器到74LS48:一个被忽略的数码管驱动芯片实战指南
  • 告别数据缺失!手把手教你用SwatWeather为SWAT模型插补气象数据(附临洮站1970-2020年实战)
  • Spring Security OAuth2.0 技术详解:分布式系统安全认证的标准方案
  • LabVIEW Actor Framework 入门避坑:用UI Actor Indicators扩展包快速搭建带界面的程序
  • 告别龟速下载!Win10/11下Android Studio 2024.2.1 + Kotlin项目Gradle 8.2完整配置指南(含阿里云/腾讯镜像源)
  • 2026年5月浙江、江苏周边发电机租赁厂家最新推荐:发电机、发电车、UPS电源租赁优选指南 - 海棠依旧大
  • Python 调用 Taotoken 聚合大模型 API 快速实现数据匹配分析
  • 第六期漫画周报
  • 教你一天从0到1构建可生产AI智能体(内含避坑指南)
  • 2026年衡水装修服务商参考指南:衡水新洲装饰,以规范匠心守护理想居所 - 海棠依旧大
  • Scratch项目优化实战:避开这三个常见动画坑,让你的作品丝滑度提升200%
  • 终极解决方案:Universal-Updater如何彻底改变3DS自制软件管理流程
  • 用STM32CubeIDE玩转HC-05蓝牙:从手机APP控制到舵机PWM的物联网小项目实战
  • OpenClaw Edge AI Platform:在树莓派/Jetson Nano上部署私有AI助手的完整指南
  • 2026年5月衡水装修公司最新推荐:家装、工装、全屋定制优选指南 - 海棠依旧大
  • 机器学习40讲-09:实验设计
  • 2026办公革命:Gemini3.1Pro一键生成周报会议纪要
  • Longevity OS:专为长寿研究打造的开源计算环境架构解析
  • 2026年零成本!实测10个去AI痕迹指令+3款降AI工具,AI率99.9%降至5.7% - 降AI实验室
  • 2026年降AI工具红黑榜必看:为何部分工具越改AI率越高?免费降AI工具真的存在吗? - 降AI实验室
  • 如何快速为通达信搭建智能缠论分析系统:ChanlunX插件实战指南
  • 告别证书恐慌:手把手教你用VMware Certificate Manager重置vCenter 6.7所有证书
  • 基于 Unreal Engine 的 C++ 模块开发:构建可扩展游戏系统
  • Python迷宫寻路实战:用DFS和BFS分别找出所有路径和最短路径(附完整代码)
  • 避坑指南:Cesium CustomShader里那些容易搞混的FeatureId和Metadata怎么用?
  • AssetRipper终极教程:5分钟学会Unity资产提取的完整方法
  • 如何在5分钟内构建你的私有化语音识别系统:Whisper.cpp完全指南
  • 2026 南京办公室装修权威甄选 本土标杆力天装饰领跑行业 - 小艾信息发布
  • 为Claude Code编程助手配置Taotoken作为后端模型
  • 别再手动改CSS了!Office Web Apps 2013隐藏功能栏的完整操作指南(附文件路径)