Microsoft Office 被广泛用于商务和运营分析中, 其中 Excel 尤其受欢迎。Excel 可以用于存储表格数据、创建报告、图形趋势等。在深入研究用 Python 处理 Excel 文档之前,让我们先了解一些基本术语:

  • Spreadsheet(电子表格) 或者 Workbook(工作簿) – 指文件本身(.xls or .xlsx)。
  • Worksheet(工作表) 或者 Sheet(表)–工作簿中的单个内容表,电子表格可以包含多个工作表。
  • Column(列) – 用英文字母标记的垂直数列,以“ A”开头。
  • Row(行) – 从1开始以数字标记的水平数列。
  • Cell(单元格) – 列和行的组合,例如“ A1”。

在本文中,我们来使用 Python 处理 Excel 电子表格。您将了解以下内容:

  • Python 读写 Excel 的第三方库
  • 从工作簿中获取工作表
  • 读取单元格数据
  • 遍历行和列
  • 写入 Excel 电子表格
  • 添加和删除工作表
  • 添加和删除行和列

大多数公司和大学都使用 Excel,它可以用多种不同方式使用,并可以使用 Visual Basic for Applications(VBA)进行增强。但是,VBA 有点笨拙,这就是为什么要学习如何将 Excel 与 Python 结合使用。
现在让我们了解如何使用 Python 处理 Microsoft Excel 电子表格!
Python 处理 Excel 的第三方库
您可以使用 Python 创建、读取和编写 Excel 电子表格。但是,Python 的标准库不支持使用 Excel,为此您需要安装第三方软件包。其中最受欢迎的是 OpenPyXL,您可以在此处阅读其文档:

  • https://openpyxl.readthedocs.io/en/stable/

OpenPyXL 并不是您唯一的选择,其实还有其他几个支持 Microsoft Excel 的软件包:

  • xlrd – 用于读取旧格式的 Excel (.xls) 文件
  • xlwt – 用于写入旧格式的 Excel (.xls) 文件
  • xlwings – 用于新格式的 Excel 格式并具有宏功能

几年前,前两个曾经是 Python 操作 Excel 文档的最受欢迎的库。然而,这些软件包的作者已停止维护它们。xlwings 软件包潜力很大,但是不能在所有平台上都起作用,并且需要安装 Microsoft Excel。

您将在本文中使用 OpenPyXL,因为它是在持续开发和维护的。OpenPyXL 不需要安装 Microsoft Excel,并且可以在所有平台上使用。
你可以用 pip 命令来安装 OpenPyXL:

$ python -m pip install openpyxl

安装完成后,让我们了解如何使用 OpenPyXL 读取 Excel 电子表格!
从工作簿中获取工作表
第一步是找到一个与 OpenPyXL 一起使用的 Excel 文件,本文项目的 Github 存储库中为您提供了一个 books.xlsx 文件。您可以通过以下网址下载它:

  • https://github.com/driscollis/python101code/tree/master/chapter38_excel

您也可以用自己的文件,尽管您自己文件的输出内容与本文中的示例并不一样。
下一步是编写一些代码来打开电子表格。为此请创建一个名为
open_workbook.py
的新文件,并将以下代码添加到其中:

# open_workbook.py
from openpyxl import load_workbook
def open_workbook(path):
    workbook = load_workbook(filename=path)
    print(f'Worksheet names: {workbook.sheetnames}')
    sheet = workbook.active
    print(sheet)
    print(f'The title of the Worksheet is: {sheet.title}')
if __name__ == '__main__':
    open_workbook('books.xlsx')

在上述示例中,您从 openpyxl 导入
load_workbook()
函数,然后创建
open_workbook()
函数,以将其导入 Excel 电子表格的路径中。接下来,使用
load_workbook()
创建一个
openpyxl.workbook.workbook.Workbook
对象。该对象使您可以访问电子表格中的工作表和单元格。它确实确实具有双重工作簿的名称,那不是错字!
open_workbook()
函数的其余部分演示了如何打印出电子表格中所有当前定义的工作表,如何获取当前活动的工作表以及如何打印该工作表的标题。
运行此代码时,将看到以下输出:

Worksheet names: ['Sheet 1 - Books']
<Worksheet "Sheet 1 - Books">
The title of the Worksheet is: Sheet 1 - Books

既然已经知道如何访问电子表格中的工作表,下面就可以继续访问单元格数据了!
读取单元格数据
使用 Microsoft Excel 时,数据存储在单元格中。您需要使 Python 能访问这些单元格,以便提取该数据。OpenPyXL 使这个过程变得很简单。
创建一个名为
workbook_cells.py
的新文件,并添加以下代码:

# workbook_cells.py
from openpyxl import load_workbook
def get_cell_info(path):
    workbook = load_workbook(filename=path)
    sheet = workbook.active
    print(sheet)
    print(f'The title of the Worksheet is: {sheet.title}')
    print(f'The value of {sheet["A2"].value=}')
    print(f'The value of {sheet["A3"].value=}')
    cell = sheet['B3']
    print(f'{cell.value=}')
if __name__ == '__main__':
    get_cell_info('books.xlsx')

此脚本将在 OpenPyXL 工作簿中加载 Excel 文件。您将获取当前工作表,然后打印出其标题和几个不同的单元格值。您可以通过以下方式访问单元格:使用工作表对象,后跟方括号以及其中的列名和行号。例如,
sheet ["A2"]
将为您获取第2行 A列的单元格。要获取该单元格的值,请使用
value
属性。
注意:这段代码使用的是 Python 3.8 中f-字符串格式化的新功能。如果使用较早的版本运行它,将会收到报错消息。
运行此代码时,将获得以下输出:

<Worksheet "Sheet 1 - Books">
The title of the Worksheet is: Sheet 1 - Books
The value of sheet["A2"].value='Title'
The value of sheet["A3"].value='Python 101'
cell.value='Mike Driscoll'

您可以尝试使用它的某些其他属性来获取有关单元格的其他信息。将以下函数添加到文件中,并在最后更新条件语句来运行它:

def get_info_by_coord(path):
    workbook = load_workbook(filename=path)
    sheet = workbook.active
    cell = sheet['A2']
    print(f'Row {cell.row}, Col {cell.column} = {cell.value}')
    print(f'{cell.value=} is at {cell.coordinate=}')
if __name__ == '__main__':
    get_info_by_coord('books.xlsx')

在此示例中,您将使用单元格对象的行和列属性来获取行和列信息。注意,“ A”列映射为“ 1”,“ B”映射为“ 2”,等等。如果要遍历Excel文档,则可以使用坐标属性来获取单元格名称。

运行此代码时,输出如下所示:

Row 2, Col 1 = Title
cell.value='Title' is at cell.coordinate='A2'

说到遍历,让我们来看一下接下来该下一步的方法!
遍历行和列
有时,您将需要遍历整个 Excel 电子表格或电子表格的某些部分。OpenPyXL 允许您以几种不同的方式执行此操作。创建一个名为
iterating_over_cells.py
的新文件,并向其中写入以下代码:

# iterating_over_cells.py
from openpyxl import load_workbook
def iterating_range(path):
    workbook = load_workbook(filename=path)
    sheet = workbook.active
    for cell in sheet['A']:
        print(cell)
if __name__ == '__main__':
    iterating_range('books.xlsx')

在这里,您加载了电子表格,然后遍历“ A”列中的所有单元格。对于每个单元格,将打印出单元格对象。如果要更精细地格式化输出,则可以使用在上一节中提到的一些单元格属性。
这是通过运行此代码得到的:

<Cell 'Sheet 1 - Books'.A1>
<Cell 'Sheet 1 - Books'.A2>
<Cell 'Sheet 1 - Books'.A3>
<Cell 'Sheet 1 - Books'.A4>
<Cell 'Sheet 1 - Books'.A5>
<Cell 'Sheet 1 - Books'.A6>
<Cell 'Sheet 1 - Books'.A7>
<Cell 'Sheet 1 - Books'.A8>
<Cell 'Sheet 1 - Books'.A9>
<Cell 'Sheet 1 - Books'.A10>
# output truncated for brevity

输出被截断,因为默认情况下它将打印出很多单元格。OpenPyXL通过使用
iter_rows()

iter_cols()
函数提供了其他遍历行和列的方法。这些方法接受下面几个参数:

  • min_row
  • max_row
  • min_col
  • max_col

您还可以添加一个
values_only
参数,该参数告诉 OpenPyXL 返回单元格而不是单元格对象的值。继续创建一个名为
iterating_over_cell_values.py
的新文件,并将以下代码添加到其中:

# iterating_over_cell_values.py
from openpyxl import load_workbook
def iterating_over_values(path):
    workbook = load_workbook(filename=path)
    sheet = workbook.active
    for value in sheet.iter_rows(
            min_row=1, max_row=3,
            min_col=1, max_col=3,
            values_only=True,
        ):
        print(value)
if __name__ == '__main__':
    iterating_over_values('books.xlsx')

此代码演示了如何使用
iter_rows()
迭代 Excel 电子表格中的行并打印出这些行的值。运行此代码时,将获得以下输出:

('Books', None, None)
('Title', 'Author', 'Publisher')
('Python 101', 'Mike Driscoll', 'Mouse vs Python')

输出是一个 Python 元组,其中包含每一列中的数据。至此,您已经了解了如何打开电子表格并从特定单元格以及通过迭代读取数据。现在,您准备学习如何使用 OpenPyXL 创建 Excel 电子表格!
写入 Excel 电子表格
使用 OpenPyXL 写入 Excel 电子表格不需要很多代码。您可以使用
Workbook()
类创建电子表格。继续创建一个名为
Writing_hello.py
的新文件,并添加以下代码:

# writing_hello.py
from openpyxl import Workbook
def create_workbook(path):
    workbook = Workbook()
    sheet = workbook.active
    sheet['A1'] = 'Hello'
    sheet['A2'] = 'from'
    sheet['A3'] = 'OpenPyXL'
    workbook.save(path)
if __name__ == '__main__':
    create_workbook('hello.xlsx')

在这里,初始化
Workbook()
并获取当前工作表。然后将“ A”列中的前三行设置为不同的字符串。最后,调用
save()
函数并向其传递新文档保存到的路径。恭喜你!您刚刚使用Python创建了一个 Excel 电子表格。
接下来,让我们看一下如何在工作簿中添加和删除工作表!
添加和删除工作表
许多人喜欢在工作簿中的多个工作表中处理数据。OpenPyXL 支持通过其
create_sheet()
方法向
Workbook()
对象添加新工作表。
创建一个名为
creating_sheets.py
的新文件,并添加以下代码:

# creating_sheets.py
import openpyxl
def create_worksheets(path):
    workbook = openpyxl.Workbook()
    print(workbook.sheetnames)
    # Add a new worksheet
    workbook.create_sheet()
    print(workbook.sheetnames)
    # Insert a worksheet
    workbook.create_sheet(index=1,
                          title='Second sheet')
    print(workbook.sheetnames)
    workbook.save(path)
if __name__ == '__main__':
    create_worksheets('sheets.xlsx')

在这里,您使用了两次
create_sheet()
将两个新的工作表添加到工作簿中。第二个示例显示了如何设置工作表的标题以及在哪个索引处插入工作表。参数
index = 1
表示该工作表将在第一个现有工作表之后添加,因为它们的索引从0开始。
运行此代码时,将看到以下输出:

['Sheet']
['Sheet', 'Sheet1']
['Sheet', 'Second sheet', 'Sheet1']

您可以看到新工作表已逐步添加到您的工作簿中。保存文件后,可以通过打开 Excel 或另一个与 Excel 兼容的应用程序来验证是否存在多个工作表。
在完成自动工作表创建过程之后,突然有了太多的工作表,因此让我们来删除一些工作表。有两种方法可以删除工作表, 继续并创建
delete_sheets.py
文件,以了解如何使用 Python 的
del
方法删除工作表:

# delete_sheets.py
import openpyxl
def create_worksheets(path):
    workbook = openpyxl.Workbook()
    workbook.create_sheet()
    # Insert a worksheet
    workbook.create_sheet(index=1,
                          title='Second sheet')
    print(workbook.sheetnames)
    del workbook['Second sheet']
    print(workbook.sheetnames)
    workbook.save(path)
if __name__ == '__main__':
    create_worksheets('del_sheets.xlsx')

此代码将创建一个新的工作簿,然后向其中添加两个新的工作表。再使用 Python 的
del
方法删除
workbook['Second sheet']
。您可以通过查看在使用
del
命令之前和之后工作表列表的打印输出来验证它是否按预期工作:

['Sheet', 'Second sheet', 'Sheet1']
['Sheet', 'Sheet1']

从工作簿中删除工作表的另一种方法是使用
remove()
方法。创建一个名为
remove_sheets.py
的新文件,并输入以下代码以了解其工作原理:

# remove_sheets.py
import openpyxl
def remove_worksheets(path):
    workbook = openpyxl.Workbook()
    sheet1 = workbook.create_sheet()
    # Insert a worksheet
    workbook.create_sheet(index=1,
                          title='Second sheet')
    print(workbook.sheetnames)
    workbook.remove(sheet1)
    print(workbook.sheetnames)
    workbook.save(path)
if __name__ == '__main__':
    remove_worksheets('remove_sheets.xlsx')

此时您可以通过将结果分配给
sheet1
来保留对所创建的第一个工作表的引用。然后稍后在代码中将其删除。另外,您也可以使用与之前相同的语法删除该工作表,如下所示:

workbook.remove(workbook['Sheet1'])

无论选择哪种方法删除工作表,输出内容都将相同:

['Sheet', 'Second sheet', 'Sheet1']
['Sheet', 'Second sheet']

现在,继续学习如何添加和删除行和列。
添加、删除行和列
OpenPyXL 具有几种的方法,可用于在电子表格中添加、删除行和列。这是在本节中将要学习的四种方法:

  • .insert_rows()
  • .delete_rows()
  • .insert_cols()
  • .delete_cols()

每一个都可以使用下面两个参数:

  • idx –插入行或列的索引
  • amount –要添加的行数或列数

要查看其工作原理,请创建一个名为
insert_demo.py
的文件,并向其中添加以下代码:

# insert_demo.py
from openpyxl import Workbook
def inserting_cols_rows(path):
    workbook = Workbook()
    sheet = workbook.active
    sheet['A1'] = 'Hello'
    sheet['A2'] = 'from'
    sheet['A3'] = 'OpenPyXL'
    # insert a column before A
    sheet.insert_cols(idx=1)
    # insert 2 rows starting on the second row
    sheet.insert_rows(idx=2, amount=2)
    workbook.save(path)
if __name__ == '__main__':
    inserting_cols_rows('inserting.xlsx')

在这里,您将创建一个工作表,并在“ A”列之前插入一个新列。列的索引从1开始,而工作表的索引从0开始。这有效地将A列中的所有单元格移到B列。然后从第2行开始插入两个新行。
现在您知道了如何插入列和行,是时候来了解如何删除它们了。
要了解如何删除列或行,请创建一个名为
delete_demo.py
的新文件并添加以下代码:

# delete_demo.py
from openpyxl import Workbook
def deleting_cols_rows(path):
    workbook = Workbook()
    sheet = workbook.active
    sheet['A1'] = 'Hello'
    sheet['B1'] = 'from'
    sheet['C1'] = 'OpenPyXL'
    sheet['A2'] = 'row 2'
    sheet['A3'] = 'row 3'
    sheet['A4'] = 'row 4'
    # Delete column A
    sheet.delete_cols(idx=1)
    # delete 2 rows starting on the second row
    sheet.delete_rows(idx=2, amount=2)
    workbook.save(path)
if __name__ == '__main__':
    deleting_cols_rows('deleting.xlsx')

此代码在多个单元格中创建文本,然后使用
delete_cols()
删除A列。它还通过
delete_rows()
从第二行开始删除两行。在处理数据时,能够添加、删除列和行会非常有用。
总结
由于Excel在许多行业中得到广泛使用,因此能够使用Python与Excel文件进行交互是一项非常有用的技能,比如帮妹纸处理运营数据。在本文中,您掌握了以下内容:

  • Python 处理 Excel 的第三方软件包
  • 从工作簿中获取工作表
  • 读取单元格数据
  • 遍历行和列
  • 写入 Excel 电子表格
  • 添加和删除工作表
  • 添加、删除行和列

OpenPyXL 可以做的甚至比这里介绍的还要多。例如,您可以使用 OpenPyXL 将公式添加到单元格,更改字体并将其他类型的样式应用于单元格。老老实实地阅读文档,并尝试在自己的一些电子表格上使用 OpenPyXL,以便充分利用其功能。

JupyterLab Server 搭建与使用笔记

2020-09-29

如何卸载 python setup.py install 安装的包?

2020-05-15

为什么 Biopython 的在线 BLAST 这么慢?

2019-11-17

生物信息学 Python 入门之源码安装

2019-09-29

Python 日期和时间函数使用指南

2019-09-21

Python 文件与目录操作方法总结

2019-02-17

聊一聊 Python 安装中的 --enable-shared

2018-11-17

Linux 下的动态库、静态库与环境变量

2019-09-07

本文分享自微信公众号 - 生信科技爱好者(bioitee)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

用 Python 帮运营妹纸快速搞定 Excel 文档的更多相关文章

  1. 五分钟搞定 Linux 文档全部知识,就看这篇文章

    作者:无痴迷,不成功 来源:见文末 写在前面 我们都知道Linux是一个支持多用户.多任务的系统,这也是它最优秀的特性,即可能同时有很多人都在系统上进行工作,所以千万不要强制关机,同时,为了保护每个人 ...

  2. 手把手教你制作微信小程序,开源、免费、快速搞定

    最近做了个"罗孚传车"的小程序 一时兴起,做了一个小程序,将个人收集的同汽车相关的行业资讯和学习资料,分享到小程序中,既作为历史资料保存,又提供给更多的人学习和了解,还能装一下:) ...

  3. Python处理Excel文档(xlrd, xlwt, xlutils)

    简介 xlrd,xlwt和xlutils是用Python处理Excel文档(*.xls)的高效率工具.其中,xlrd只能读取xls,xlwt只能新建xls(不可以修改),xlutils能将xlrd.B ...

  4. Python openpyxl : Excel 文档简单操作

    安装方法 使用 pip 或通过专门python IDE(如pyCharm)进行安装 其中pip安装方法,命令行输入:  pip install openpyxl 基本使用 第一步先是要导入 openp ...

  5. 1、关于python第三方工具操作xls和xlsx格式的excel文档选型的吐血经历

    首先,最近看了python的一本书,其中第7章是关于文章操作的,就计划把python操作excel,word,txt,xml,html,json等格式的文档做个总结,并实现一些功能,但是,第一步就要把 ...

  6. $用python处理Excel文档(2)——用xlsxwriter模块写xls/xlsx文档

    Refer:<python自动化运维:技术与最佳实践> 更多用法参考xlsxwriter官方文档:http://xlsxwriter.readthedocs.io/ 本文主要总结一下如何使 ...

  7. $ 用python处理Excel文档(1)——用xlrd模块读取xls/xlsx文档

    本文主要介绍xlrd模块读取Excel文档的基本用法,并以一个GDP数据的文档为例来进行操作. 1. 准备工作: 1. 安装xlrd:pip install xlrd 2. 准备数据集:从网上找到的1 ...

  8. 工作必备,五分钟如何搞定Excel甘特图

    工作必备,五分钟如何搞定Excel甘特图  https://www.sohu.com/a/212628821_641930 EXCEL中如何给图表添加标题 1.选中图表 >> [布局] 菜 ...

  9. java、ruby、python、php等如何生成excel文档?

    excel在我们日常工作生活中会经常用到,通常我们都是用office软件去编写文档.但是对于格式一致的excel文档,如果还是使用人工完成,那绝不是我们软件工程师的姿态了~ 下面我就介绍一种方法,不需 ...

  10. Python实现读取Excel文档中的配置并下载软件包

    问题:现在遇到这样一个问题,服务器存储了很多软件包,这些包输入不同的产品,每个产品都有自己的配置,互相交叉,那么到底某一产品所有配置的软件包下载后,占用多大空间呢? 分析:从这个问题入手,了解到:软件 ...

随机推荐

  1. dart基础---->单例singleton

    At least, there are three ways to create the singleton object with dart. 1. factory constructor clas ...

  2. 8.XSS和CSRF漏洞

    XSS和CSRF漏洞 目录 XSS和CSRF漏洞 XSS漏洞介绍 XSS分类 利用XSS漏洞如何实行攻击 利用XSS盗取用户的Cookie 利用XSS实行钓鱼 利用XSS进行键盘监控 CSRF漏洞介绍 ...

  3. 一次对pool的误用导致的.net频繁gc的诊断分析

    (最近有读者朋友表示,希望能加一些示意图来描述分析过程中用到的原理知识.好的,之后我会注意,谢谢这位读者) 背景 有位朋友找我,希望我能帮看一下他的一个service.从他的描述看,并没有资源方面的泄 ...

  4. vivo 手机云服务建设之路-平台产品系列04

    作者:vivo 互联网平台产品研发团队 - He Zhichuang.Han Lei 手机云服务目前作为每家手机厂商必备的一项基础服务,其服务能力和服务质量对用户来说可以说是非常重要.用户将自己大量的 ...

  5. CTF-RE-学习记录-汇编-2

    汇编工具DTDebug 下载后设置好odd与插件路径,同时在属性中设置为管理员身份运行(无Administrator权限进入的时候一直在提示) 寄存器 存储数据: CPU>内存>硬盘 32 ...

  6. 关于java.lang.Object类、equals()、toString()的使用、以及方法得重载和重写得一些笔记

    java.lang.Object类 * 1.Object类是所有Java类的根父类; * 2.如果在类的声明中未使用extends关键字指明其父类,则默认父类为java.lang.Object类 * ...

  7. Cesium案例(六) Time Dynamic Wheels

      Cesium.Ion.defaultAccessToken =         "token";       const viewer = new Cesium.Viewer( ...

  8. [Maven]探究settings.xml

    1 settings.xml的配置模块 1-1 localRepository The path to the local repository maven will use to store art ...

  9. [Java]【异常处理】在项目开发中的通用规范

    这一问题,已苦恼多日,上述答案系近整整2日广泛阅读书籍.博客.网络问答后,归纳并苦思而成. 本博文仅罗列总的观点,各观点的具体解释,可私信Word笔记. 如需转载or复制时,请注明出处. 本博文同步发 ...

  10. Hugging News #0407: Google AI 的 Pix2Struct 来啦、开发者资源页面发布

    每一周,我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新,包括我们的产品和平台更新.社区活动.学习资源和内容更新.开源库和模型更新等,我们将其称之为「Hugging Ne ...