Python 读取 Excel 文件

225 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第28天,点击查看活动详情

前言

MS Office 最常见的办公软件套装,其格式实际上已经成为多种文件类型的标准。其中 MS Excel 是最常见的电子表格应用程序,而 Excel 格式是最常见的电子表格格式,这种格式也被绝大多数其他电子表格应用程序所接受。

Python 读取Excel文件

在本节中,我们将学习如何使用 Python 中的 openpyxl 模块从 Excel 电子表格中读取数据信息。

安装 openpyxl

为了使用 openpyxl 模块,我们首先需要安装该模块,其安装方法与其它第三方库的安装完全相同:

$ pip install openpyxl

读取 Excel 文件

首先,导入 openpyxl 模块:

>>> import openpyxl

读取 Excel 文件 movies_rating.xlsx,将其加载到内存中:

>>> xlsfile = openpyxl.load_workbook('movies_rating.xlsx')

导入模块后,实例化一个 Workbook 对象将电子表格文件加载到的内存中。每个工作簿 (workbook)可以包含一个或多个工作表 (sheet),每个工作表都可以包含多个单元格 (cell)。

遍历所有工作表并获取第一个工作表(在本节使用的 Excel 文件中第一个工作表是唯一包含数据的工作表):

>>> xlsfile.sheetnames
['movies_rating']
>>> sheet = xlsfile['movies_rating']

为了确定电子表格文件中可用的工作表,我们可以使用 sheetnames 属性获取所有工作表名称(本节中使用的电子表格中仅包含一个工作表),然后我们可以像字典一样访问工作表以检索 Worksheet 对象。

获取单元格 B4C4 的值,分别是 'Batman' 和 '7.7':

>>> sheet['B4'].value
'Batman'
>>> sheet['C4'].value
7.7

工作表可以直接通过名称访问单元格,例如 A4C4,访问单元格时会返回一个 Cell 对象,使用 value 属性可以访问存储在单元格中的数据。

获取电子表格中行和列总数,超出电子表格范围的任何单元格都将返回值 None

>>> sheet.max_row
5
>>> sheet.max_column
4
>>> sheet['D4'].value
>>> sheet['A6'].value
>>> sheet['D1'].value

使用 max_columnsmax_rows 可以获得在工作表中存储数据的区域,使我们能够在数据的范围内进行搜索。Excel 将列定义为字母( ABC 等),将行定义为数字( 123 等)。需要注意的是,在访问单元格时需要首先设置列,然后设置行,例如只能使用 D1,而不能使用 1D,否则会引发异常。数据区域外的单元格可以访问,但不会返回数据,它们可用于写入新数据。

>>> sheet['1D'].value
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "Documents/new_venv/lib/python3.7/site-packages/openpyxl/worksheet/worksheet.py", line 290, in __getitem__
    min_col, min_row, max_col, max_row = range_boundaries(key)
  File "Documents/new_venv/lib/python3.7/site-packages/openpyxl/utils/cell.py", line 135, in range_boundaries
    raise ValueError(msg)
ValueError: 1D is not a valid coordinate or range