Python 操作 Excel 库之 openpyxl

编程语言 Python 现如今如日中天,之所以如此繁荣,除了易学易学的特点之外,应用场景更广也是主要因素之一。除 Web 开发,科学计算,AI 人工智能外,日常办公也有 Python 的用武之地,今天我们来学习 Python 操作 Excel。

Python 用于操作 Excel 的库有很多,如:xlwings、pandas、xlsxwriter 等,今天我们用到的是很受欢迎的 openpyxl,官档地址:https://openpyxl.readthedocs.io/en/latest/ ,该库可以读写 Excel xlsx/xlsm/xltx/xltm。

编程初学者在学习一个新库或框架时,往往会觉得要记的东西比较多,面对满屏的函数、方法、属性不知所措,觉得需要死记的东西太多,导致学习效率很低!有这种现象的一个主要原因是未深入理解面向对象编程,今天我们以 openpyxl 学习为例,换种思维方式,融入OOP 理念,你会发现编程其实很简单。

面向对象编程思想一个主要特点即是以人的思维习惯去分析、分解问题,简单来讲,可以将事物抽象为类,将对象所具备的特征和行为抽象为方法,代码的定义抽象都是为描述、抽象现实中事物交互行为而服务的。

openpyxl 第三方功能库,而非标准库内置,因而使用前先安装到当前 Python 环境,操作系统命令行下 `pip install openpyxl `即可安装,目前最新版本为 2.6.3

作为对比学习,我们打开 MS Office Excel 套件(本例为 Office 2016),看下基本界面:

Python 操作 Excel 这个库开发简单明了

Office Excel 基本界面及术语

先抛开代码,从非开发人员角度,我们可以总结发现几个对象:

  • 工作簿,即整个文档
  • 工作表,工作簿下的表格标签,一个工作簿可以包含多个工作表
  • 行,横行多个单元格的序列,以数字标识序号
  • 列,纵向多个单元格的序列,以字母标示序号
  • 单元格,行列交汇,用于填写值的网格

接下来,同样以非开发人员即普通办公人员角度想象一下创建一个表格的几个步骤:

  • 使用 Excel 软件创建一个工作簿对象
  • 使用默认工作表(Sheet),或自定义新增、编辑,双击修改工作表的标签名称
  • 定位行/列,单元格,填充输入值
  • 保存当前工作簿,可以指定文件名称,如:data.xlsx

前述以普通用户角度分解了操作对象及过程,若以面向对象编程思想来分析,便可以将前面的对象和过程作以下归纳:

  • 工作簿(对象)
  • 特征:名称、包含式个工作表
  • 行为:载入、存储……
  • 工作表(对象)
  • 特征:标题文字、标签颜色……
  • 行为:获取当前、获取所有工作表……
  • 单元格:
  • 特征:所在行、所在列、值……
  • 行为:略……

不论哪种编程语言,符合面向对象编程思想的代码通常总是定义一组相关的类,用于抽象相关的对象,并将该对象具有的特征和行为抽象为属性和方法。openpyxl 即符合这个机制和原则,理解这一点,有助于深入理解代码组织形式,启发思维。

接下来我们以程序的角度来分析分解前述创建工作簿、切换到指定工作表,并在特定单元格填充内容,最终命名保存。原本由原来的 Office Excel 完成的工作,现在有 Python openpyxl 编程实现(内存中操作)。

步骤:

1、内存创建工作簿对象:

Python 操作 Excel 这个库开发简单明了

创建 工作簿

openpyxl.Workbook 类抽象工作簿对象,wb 作为在内存中的对象引用

此时,相当于 Excel 软件创建一个空的工作簿

Python 操作 Excel 这个库开发简单明了

相当于 Excel 执行结果

2、 找到工作簿当前激活的工作表

Python 操作 Excel 这个库开发简单明了

对应工作表操作

此时相当于定位切换至默认的工作表 “Sheet1”

Python 操作 Excel 这个库开发简单明了

对应 Excel 操作结果

此时可以修改内存工作簿工作表 Sheet1 的标题名称

Python 操作 Excel 这个库开发简单明了

修改工作表标题属性

相当于 Excel 双击改变工作表标签文字

Python 操作 Excel 这个库开发简单明了

对应 Excel 操作结果

3. 操作单元格

定位行列单元格(由 Cell 类抽象)

Python 操作 Excel 这个库开发简单明了

定位获取单元格对象引用

在单元格内填充值

Python 操作 Excel 这个库开发简单明了

获取或设置单元格 value 值

Cell.value 表示该单元格值, ws.rows 包含有数据的行集合

此时,相当于 Excel 结果:

Python 操作 Excel 这个库开发简单明了

对应 Excel 结果

如果我们有批量的数据,可以计算好行列索引,以批量写入单元格

Python 操作 Excel 这个库开发简单明了

计算好行列索引,批量写入单元格内容

此时,相当于 Excel 结果:

Python 操作 Excel 这个库开发简单明了

对应 Excel 结果

4. 保存工作簿至文档

截止目前,所有的操作均映射在内存中,wb.save(‘名称.xlsx’) 可以保存文档至当前位置

Python 操作 Excel 这个库开发简单明了

wb.save() 保存工作簿

使用 Excel 打开程序保存的 scores.xlsx 文件,我们发现最终生成的文档与期望结果保持一致

Python 操作 Excel 这个库开发简单明了

最终保存的 Excel 文档结果

本文以面向对象编程思维方式介绍了 openpyxl 库的 Excel 基本操作处理,更多操作如:批量单元格处理、图片插入、加载文档等,小伙伴们可以使用同样的思维方式思考对应功能在库中可能会有什么样的对象类来抽象,以及什么样的属性方法分别映射特征和行为!理解这一样,即使对查询帮助也有更清晰的认识!

海拔科技

自媒体人,喜欢网络,热爱研究。本站头条号:星河 熊掌号:海拔科技

相关推荐

PyCharm 插件 MicroPython的安装

前言 PyCharm可以说是当今最流行的一款Python IDE了,大部分购买TPYBoard的小伙伴都会使用PyCharm编写MicroPython的程序。遗憾的是,只是把PyCharm当做了一种代码编辑器,调试依然还的需要其他辅助软件,比如PuT …

Centos 7 下编译安装FFmpeg 4.1 版本 无报错

我在系统中安装了2个版本的python,一个是python 3.6,另一个是centos7 自带的python2.7,我已经把默认python指定为python3,在命令行输入Python2会执行python2.7版本 ffmpeg 4.1 编译安装后,可以得到ffmpeg,f …

Centos7升级Python2.X至Python3.72

为了使用某些基于Python的应用,这里需将旧版的Python升级至3.X,升级后可能会出现yum不可能或者其他问题, 所以,在更新 Python 时,建议不要删除旧版本(新旧版本可以共存)。 一、查看当前python版本 二、下 …