Excel 文件的读取

简介: 在上面的代码中,首先导入第三方库 openpyxl。接着使用 load_workbook 方法来读取 Excel 文档,在使用 load_workbook 时,只需要向 load_workbook 方法传入要打开文档的名称即可。最后,可以通过 type 函数查看打开的文档的类型。文档 example.xlsx 的内容如下所示:

1. 打开Excel 文档

Excel 文档创建完成后,为了读取 Excel 文档。首先需要打开 Excel 文档。代码如下:

import openpyxl
wb = openpyxl.load_workbook("example.xlsx")
type(wb)

在上面的代码中,首先导入第三方库 openpyxl。接着使用 load_workbook 方法来读取 Excel 文档,在使用 load_workbook 时,只需要向 load_workbook 方法传入要打开文档的名称即可。最后,可以通过 type 函数查看打开的文档的类型。文档 example.xlsx 的内容如下所示:

网络异常,图片无法展示
|

2. 从工作簿取得工作表

工作簿中取得工作表之前,首先看下工作簿中包含哪些工作表,接上面的代码,添加如下代码:wb.sheetnames 上述代码添加后的完整代码为:

import openpyxl
wb = openpyxl.load_workbook("example.xlsx")
type(wb)
wb.sheetnames

从输出结果中看到,工作簿总共包含了三个工作表,分别是:Sheet1、Sheet2、Sheet3。接着上面的代码,添加如下代码:

ws = wb['Sheet3']
ws.title

上述代码添加后的完整代码为:

import openpyxl
wb = openpyxl.load_workbook("example.xlsx")
type(wb)
wb.sheetnames
ws = wb['Sheet3']
ws.title

上面代码中,通过object[name]的方式来获取工作表,想要获取哪个工作表,只需要传入工作表的名称即可。另外,我们还可以通过对象的 active 属性来获取当前活跃的工作表。接着上面的代码,添加如下代码:

ws = wb.active
ws.title

上述代码添加后的完整代码为:

import openpyxl
wb = openpyxl.load_workbook("example.xlsx")
type(wb)
wb.sheetnames
ws = wb['Sheet3']
ws.title
ws = wb.active
ws.title

这样便通过对象的 active 属性获取到当前活跃的工作表。

3. 从工作表中取得单元格

上面讲到了从工作簿中获取工作表,下面来讲从工作表中获取单元格。接着上面的代码,添加如下代码:

ws = wb['Sheet1']
wc = ws['A1']
wc.value

上述代码添加后的完整代码为:

import openpyxl
wb = openpyxl.load_workbook("example.xlsx")
type(wb)
wb.sheetnames
ws = wb['Sheet3']
ws.title
ws = wb.active
ws.title
ws = wb['Sheet1']
wc = ws['A1']
wc.value

上面添加的代码首先获取工作表 Sheet1,然后通过object[name]的方式工作表中的单元格。这样便获取到了单元格 A1,并通过单元格的属性 value 获取到了单元格中所包含的值。当列数较小时,使用字母来指定某个列并没有太多不方便,但是当列数逐渐增加,特别是在 Z 列之后,列开始使用两个字母 AA、AB、AC 等,这时候再通过字母来指定列时,便有诸多不便。这时候可以使用 cell() 方法来获取工作表中的单元格,在调用 cell() 方法时,传入参数 row 和 column。接着上面的代码,添加如下代码:

ws = wb['Sheet1']
wc = ws.cell(row=1, column=2)
wc.value

上述代码添加后的完整代码为:

import openpyxl
wb = openpyxl.load_workbook("example.xlsx")
type(wb)
wb.sheetnames
ws = wb['Sheet3']
ws.title
ws = wb.active
ws.title
ws = wb['Sheet1']
wc = ws['A1']
wc.value
ws = wb['Sheet1']
wc = ws.cell(row=1, column=2)
wc.value

上面添加的代码获取了 B1 单元格。在使用方法 cell() 方法获取单元格时,列和行的序号都是从 1 开始的。有了 cell() 方法,可以很方便地通过循环一次获取多个单元格。接着上面的代码,添加如下代码:

for i in range(1, 8, 2):
print(ws.cell(row=i, column=2).value)

上述代码添加后的完整代码为:

import openpyxl
wb = openpyxl.load_workbook("example.xlsx")
type(wb)
wb.sheetnames
ws = wb['Sheet3']
ws.title
ws = wb.active
ws.title
ws = wb['Sheet1']
wc = ws['A1']
wc.value
ws = wb['Sheet1']
wc = ws.cell(row=1, column=2)
wc.value
for i in range(1, 8):
    print(ws.cell(row=i, column=2).value)

添加的代码获取到了第二列从第一行到第七行的单元格的值。

4. 列字母和数字之间的转换

由于 Excel 文档中的列名是使用字母来表示的,当别数较大时,通过字母不能很方便的得出是第几行。不过,openpyxl 模块提供了 column_index_from_string() 方法,使用此方法可以很方便的得出字母列所对应的列数。举例代码如下:

from openpyxl.utils import column_index_from_string
column_index_from_string('A')
column_index_from_string('AA')
column_index_from_string('AHP')

上面的代码得到了列 A、AA、AHP 所对应的列数分别为 1、27、900。

5. 遍历行和列

5.1 遍历所有行的单元格

import openpyxl
wb = openpyxl.load_workbook("example.xlsx")
ws = wb['Sheet1']
for row in ws.rows:
    for item in row:
        print(item.value)
    print('--- END OF ROW ---')

上面代码我们以行的方向遍历了所有的单元格。使用了二层循环,第一次循环获取所有的行,第二层循环获取每行中的每个单元格。

5.2 遍历所有列的单元格

import openpyxl
wb = openpyxl.load_workbook("example.xlsx")
ws = wb['Sheet1']
for col in ws.columns:
    for item in col:
        print(item.value)
    print('--- END OF COL ---')

上面代码我们以列的方向遍历了所有的单元格。使用了二层循环,第一次循环获取所有的列,第二层循环获取每列中的每个单元格。

5.3 遍历单行的单元格

import openpyxl
wb = openpyxl.load_workbook("example.xlsx")
ws = wb['Sheet1']
for cell in ws[2]:
    print(cell.value)

上面代码获取了第二行的所有单元格。

5.4 遍历单列的单元格

import openpyxl
wb = openpyxl.load_workbook("example.xlsx")
ws = wb['Sheet1']
for cell in ws['B']:
    print(cell.value)

5.5 遍历多行的单元格

import openpyxl
wb = openpyxl.load_workbook("example.xlsx")
ws = wb['Sheet1']
for row in ws[1:3]:
    for cell in row:
        print(cell.value)
    print('--- END OF ROW ---')

上述代码获取了第一行到第三行的所有单元格。

5.6 遍历多列的单元格

import openpyxl
wb = openpyxl.load_workbook("example.xlsx")
ws = wb['Sheet1']
for col in ws['A':'C']:
    for cell in col:
        print(cell.value)
    print('--- END OF COL ---')

上述代码获取了第一列到第三列的所有单元格。

5.7 遍历一个区域内的单元格

5.7.1 行优先

import openpyxl
wb = openpyxl.load_workbook("example.xlsx")
ws = wb['Sheet1']
for row in ws.iter_rows(min_row=4,max_row=5,min_col=2,max_col=3):
    for cell in row:
        print(cell.value)

上面代码遍历的单元格如下图所示:

网络异常,图片无法展示
|

5.7.2 列优先

import openpyxl
wb = openpyxl.load_workbook("example.xlsx")
ws = wb['Sheet1']
for col in ws.iter_cols(min_row=4,max_row=5,min_col=2,max_col=3):
    for cell in col:
        print(cell.value)

上面代码遍历的单元格如下图所示:

网络异常,图片无法展示
|

相关文章
|
6天前
|
文字识别 Serverless 开发工具
【全自动改PDF名】批量OCR识别提取PDF自定义指定区域内容保存到 Excel 以及根据PDF文件内容的标题来批量重命名
学校和教育机构常需处理成绩单、报名表等PDF文件。通过OCR技术,可自动提取学生信息并录入Excel,便于统计分析和存档管理。本文介绍使用阿里云服务实现批量OCR识别、内容提取、重命名及导出表格的完整步骤,包括开通相关服务、编写代码、部署函数计算和设置自动化触发器等。提供Python示例代码和详细操作指南,帮助用户高效处理PDF文件。 链接: - 百度网盘:[链接](https://pan.baidu.com/s/1mWsg7mDZq2pZ8xdKzdn5Hg?pwd=8866) - 腾讯网盘:[链接](https://share.weiyun.com/a77jklXK)
32 5
|
19天前
|
文字识别 BI
【图片型PDF】批量识别扫描件PDF指定区域局部位置内容,将识别内容导出Excel表格或批量改名文件,基于阿里云OCR对图片型PDF识别改名案例实现
在医疗和政务等领域,图片型PDF文件(如病历、报告、公文扫描件)的处理需求广泛。通过OCR技术识别这些文件中的文字信息,提取关键内容并保存为表格,极大提高了信息管理和利用效率。本文介绍一款工具——咕嘎批量OCR系统,帮助用户快速处理图片型PDF文件,支持区域识别、内容提取、导出表格及批量改名等功能。下载工具后,按步骤选择处理模式、进行区域采样、批量处理文件,几分钟内即可高效完成数百个文件的处理。
92 8
|
3月前
|
人工智能 自然语言处理 Java
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
303 9
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
3月前
|
Python
按条件将Excel文件拆分到不同的工作表
使用Python的pandas库,可以轻松将Excel文件按条件拆分到不同的工作表中。本文通过一个示例代码展示了如何生成一个包含总成绩表和三个班级表的Excel文件。代码首先创建了一个包含学生姓名、班级和各科成绩的数据框,然后按班级分组,将每个班级的数据分别写入不同的工作表。最后,生成的Excel文件将包含四个工作表,分别为总成绩表和三个班级的成绩表。
54 6
按条件将Excel文件拆分到不同的工作表
|
3月前
|
Python
批量将不同的工作簿合并到同一个Excel文件
本文介绍如何使用Python的`pandas`库批量合并不同工作簿至同一Excel文件。通过模拟生成三个班级的成绩数据,分别保存为Excel文件,再将这些文件合并成一个包含所有班级成绩的总成绩单。步骤包括安装必要库、生成数据、保存与合并工作簿。
79 6
|
3月前
|
Python
按条件将Excel文件拆分到不同的工作表
使用Python的pandas库,可以轻松将Excel文件按条件拆分为多个工作表。本文通过一个具体示例,展示了如何根据学生班级将成绩数据拆分到不同的工作表中,并生成一个包含总成绩表和各班级成绩表的Excel文件。代码简洁明了,适合初学者学习和应用。
71 6
|
4月前
|
前端开发
实现Excel文件和其他文件导出为压缩包,并导入
实现Excel文件和其他文件导出为压缩包,并导入
54 1
|
4月前
|
存储 Java API
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
202 4
|
5月前
|
JavaScript 前端开发 数据处理
Vue导出el-table表格为Excel文件的两种方式
Vue导出el-table表格为Excel文件的两种方式
247 6
|
5月前
|
easyexcel Java UED
SpringBoot中大量数据导出方案:使用EasyExcel并行导出多个excel文件并压缩zip后下载
在SpringBoot环境中,为了优化大量数据的Excel导出体验,可采用异步方式处理。具体做法是将数据拆分后利用`CompletableFuture`与`ThreadPoolTaskExecutor`并行导出,并使用EasyExcel生成多个Excel文件,最终将其压缩成ZIP文件供下载。此方案提升了导出效率,改善了用户体验。代码示例展示了如何实现这一过程,包括多线程处理、模板导出及资源清理等关键步骤。

热门文章

最新文章