我相信您曾经使用过Microsoft Excel。 在处理电子表格,表格,图表等时,它非常强大。但是Python与这有什么关系呢?
在处理Excel文件时,Python会改变游戏规则,因为它可以自动执行某些与Excel有关的任务中可能遇到的艰巨任务。 例如,您可能需要在数百本公司预算的电子表格中查找某些信息。 非常令人生畏,不是吗? 在本教程中,我将向您展示如何轻松地使用Python处理Excel文档。
哦,如果您的计算机上没有安装Microsoft Excel,请不要担心。 您可以使用其他替代方法来完成本教程,例如LibreOffice Calc和OpenOffice Calc 。
所以,让我们开始吧!
OpenPyXL
OpenPyXL
是用于读取和写入Excel 2010 xlsx/xlsm/xltx/xltm
文件的库。 这是我们在本教程中将使用的库来处理Excel文档。
为了使用此库,我们需要做的第一件事是安装OpenPyXL
。
安装OpenPyXL
为了安装OpenPyXL
,我们将使用pip ,它(基于Wikipedia):
软件包管理系统,用于安装和管理以Python编写的软件包。 在Python软件包索引(PyPI)中可以找到许多软件包。
您可以按照《 Python打包用户指南》中提到的步骤安装pip
,但是如果您具有Python 2.7.9
和更高版本,或者Python 3.4
和更高版本,则已经具有pip
!
现在可以通过键入以下命令(在Mac OS X的Terminal中)简单地安装OpenPyXL
:
pip install openpyxl
打开一个Excel文档
安装OpenPyXL
,我们准备开始使用Excel文档。 我们将在Excel文档上执行的第一个常规任务是打开该文档。 继续并下载Excel文件sample.xlsx以便按照本教程进行操作,或者您可以使用任何喜欢的Excel文件。
在使用OpenPyXL
之前,我们需要将其import
,如下所示:
import openpyxl
打开Excel文档所需的方法是load_workbook()
。 如果您想知道工作簿的含义,那只是Excel电子表格文档。 因此,我们需要打开Excel文档的脚本如下:
import openpyxl
excel_document = openpyxl.load_workbook('sample.xlsx')
现在,让我们看看从load_workbook()
方法返回的type
。 可以按以下步骤完成:
print type(excel_document)
这将返回以下内容:
<class 'openpyxl.workbook.workbook.Workbook'>
如我们所见,返回的对象是Workbook
,其数据类型为workbook
。 此处的Workbook
对象代表Excel文件。
工作表名称
Excel中的工作表由列(字母从A,B,C等开始)和行(从1、2、3等开始)组成。 为了检查Excel文档中有哪些工作表,我们使用get_sheet_names()
方法,如下所示:
excel_document.get_sheet_names()
如果我们print
以上命令,则会得到以下信息:
[u'Sheet1']
因此表明我们有一张名为Sheet1
图纸。
如果您有多个工作表,则可以使用以下方法按名称访问特定工作表: get_sheet_by_name()
。
访问单元
既然我们已经学习了如何打开Excel文件并获取工作表,让我们看看访问该工作表中的单元格有多容易。 您要做的就是检索该工作表,然后确定单元格的位置(坐标)。 假设我们要访问我们拥有的Excel文档中的A
列第2
行,即A2
。 可以如下实现:
sheet = excel_document.get_sheet_by_name('Sheet1')
print sheet['A2'].value
在这种情况下,您将返回以下值: Abder
。
我们还可以使用行列表示法。 例如,如果要访问第5
行和第2
列的单元格,请键入以下内容:
sheet.cell(row = 5, column = 2).value
在这种情况下,输出为: programmer
。
如果要查看表示单元格的对象类型,可以键入:
print type(sheet['A2'])
要么:
print sheet.cell(row = 5, column = 2)
在这种情况下,您将获得以下输出:
<class 'openpyxl.cell.cell.Cell'>
这意味着该对象的类型为Cell
。
访问一系列单元格
如果您对访问一系列单元而不是仅一个单元感兴趣,该怎么办? 假设我们要访问从A1
到B3
的单元格,在我们的Excel文档中看起来像这样?
可以使用以下脚本完成此操作:
multiple_cells = sheet['A1':'B3']
for row in multiple_cells:
for cell in row:
print cell.value
在这种情况下,您将获得以下输出:
Name
Profession
Abder
Student
Bob
Engineer
访问所有行和列
OpenPyXL
使您可以分别使用rows()
和columns()
方法访问Excel文档中的所有行和列。
为了访问所有行,我们可以执行以下操作:
all_rows = sheet.rows
print all_rows[:]
注意,我们使用[:]
表示法来访问所有行 。 这是因为从whole_document
返回的对象类型是一个tuple
。
上面脚本的输出如下:
((<Cell Sheet1.A1>, <Cell Sheet1.B1>), (<Cell Sheet1.A2>, <Cell Sheet1.B2>), (<Cell Sheet1.A3>, <Cell Sheet1.B3>), (<Cell Sheet1.A4>, <Cell Sheet1.B4>), (<Cell Sheet1.A5>, <Cell Sheet1.B5>), (<Cell Sheet1.A6>, <Cell Sheet1.B6>), (<Cell Sheet1.A7>, <Cell Sheet1.B7>))
另一方面,如果要访问所有列 ,则只需执行以下操作:
all_columns = sheet.columns
print all_columns[:]
在这种情况下,您将获得以下输出:
((<Cell Sheet1.A1>, <Cell Sheet1.A2>, <Cell Sheet1.A3>, <Cell Sheet1.A4>, <Cell Sheet1.A5>, <Cell Sheet1.A6>, <Cell Sheet1.A7>), (<Cell Sheet1.B1>, <Cell Sheet1.B2>, <Cell Sheet1.B3>, <Cell Sheet1.B4>, <Cell Sheet1.B5>, <Cell Sheet1.B6>, <Cell Sheet1.B7>))
正如在OpenPyXL文档中所见,您当然可以对Excel文档做更多的事情 。
结论
在本教程中,我们注意到使用Python处理Excel文档的灵活性。 还记得本教程开头提到的场景吗? 值得尝试作为一个项目!
无论您是刚刚起步还是想学习新技能的经验丰富的程序员,都可以通过我们完整的python教程指南学习Python。
翻译自: https://code.tutsplus.com/tutorials/how-to-work-with-excel-documents-using-python--cms-25698