Python数据分析从入门到精通
上QQ阅读APP看书,第一时间看更新

4.2 使用openpyxl处理Office文件

在Python程序中可使用第三方模块将数据转换成Office格式。例如使用openpyxl模块可以读写Excel文件,包括xlsx、xlsm、xltx和xltm格式。在使用openpyxl之前需要先通过如下命令进行安装。

4.2.1 openpyxl基础

在openpyxl中主要用到如下3个概念。

● Workbook:表示一个Excel工作表。

● Worksheet:表示工作表中的一张表页。

● Cells:表示一个单元格。

openpyxl模块是围绕着上述3个概念实现本身功能的,其本身的使用流程也是结合上述3个概念进行的:首先打开Workbook,然后定位Sheet,最后操作Cell。

(1)Workbook对象

因为一个Workbook对象代表一个Excel文档,所以在操作Excel文档之前需要先创建一个Workbook对象。使用openpyxl创建Excel文件的方法十分简单,只需直接调用类Workbook即可创建一个新的Excel文档。

如果已经存在Excel文档,可使用openpyxl模块中的函数load_workbook读取Excel文档。虽然函数load_workbook有多个参数,但只有参数filename为必需参数,即代表一个文件名,也可以是一个打开的文件对象。

在Workbook对象中提供了许多与Sheet有关的属性和方法,具体说明如下。

● active:获取当前活跃的Worksheet。

● worksheets:以列表的形式返回所有的Worksheet(表格)。

● read_only:判断是否以read_only模式打开Excel文档。

● encoding:获取文档的字符集编码。

● properties:获取文档的元数据,如标题,创建者,创建日期等。

● sheetnames:获取工作簿中的表(列表)。

在Workbook中,常用的内置方法如下所示。

● get_sheet_names:获取所有表格的名称(新版不建议使用,通过Workbook的sheetnames属性即可获取)。

● get_sheet_by_name:通过表格名称获取Worksheet对象(新版不建议使用,通过Worksheet[‘表名‘]获取)。

● get_active_sheet:获取活跃的表格(新版本建议通过active属性获取)。

● remove_sheet:删除一个表格。

● create_sheet:创建一个空白表格。

● copy_worksheet:在Workbook内复制表格。

(2)Worksheet对象

有了Worksheet对象以后,可通过Worksheet对象获取表格属性,得到单元格中的数据,修改表格中的内容。openpyxl模块提供了非常灵活的方式来访问表格中的单元格和数据,其中最为常用的Worksheet属性如下。

● title:表格标题。

● dimensions:表格大小,指含有数据的表格大小,即左上角的坐标右下角的坐标如A1:C3。

● max_row:表格最大行。

● min_row:表格最小行。

● max_column:表格最大列。

● min_column:表格最小列。

● rows:按行获取单元格(Cell对象)生成器。

● columns:按列获取单元格(Cell对象)生成器。

● freeze_panes:冻结窗格。

● values:按行获取表格的内容(数据),生成器。

在上述属性中,属性freeze_panes的主要功能是,当表格较大时冻结顶部的行或左边的行。在用户滚动时冻结的行始终可见。同时可将冻结行设置为一个Cell对象或一个表示单元格坐标的字符串,在这个单元格上面的行和左边的列将会被冻结(单元格所在的行和列不会被冻结)。假设存在一个名为template.xls的Excel文件,包含Sheet1、Sheet2和Sheet3,另外在Sheet3中输入如图4-4所示的数据。

图4-4 名为template.xls的Excel文件

如要冻结第一行,只需设置a2为freeze_panes。若要冻结第一列,则freeze_panes取值为b1,如果要同时冻结第一行和第一列,那么需要设置b2为freeze_panes。当freeze_panes值为none时,表示不冻结任何列。

在Worksheet中,常用的内置方法如下所示。

● iter_rows:按行获取所有单元格,内置属性有min_row、max_row、min_col和max_col。

● iter_columns:按列获取所有的单元格。

● append:在表格末尾添加数据。

● merged_cells:合并多个单元格。

● unmerged_cells:移除合并的单元格。

(3)Cell对象

Cell对象比较简单,常用的属性如下。

● row:单元格所在的行。

● column:单元格所在的列。

● value:单元格的值。

● coordinate:单元格的坐标。

4.2.2 使用openpyxl读取Excel文件的数据

在下面的实例文件office01.py中,演示了使用openpyxl读取指定Excel文件数据的过程。

源码路径:daima\4\4-2\office01.py

执行后会输出:

4.2.3 将4组数据导入Excel文件

在下面的实例文件office02.py中,演示了将4组数据导入Excel文件中的过程。

源码路径:daima\4\4-2\office02.py

执行后在指定文件template.xlsx中显示导入的4组数据,如图4-5所示。

图4-5 导入的4组数据

4.2.4 在Excel文件中检索某关键字数据

在下面的实例文件office03.py中,演示了在指定Excel文件中检索某关键字数据的过程。

源码路径:daima\4\4-2\office03.py

执行后可以通过输入关键字的方式快速查询Excel文件中的数据,如下面的检索过程。

4.2.5 将数据导入Excel文件并生成一个图表

在下面的实例文件office04.py中,演示了将指定数据导入Excel文件中,并根据导入的数据在Excel文件中生成一个图表的过程。

源码路径:daima\4\4-2\office04.py

执行后将rows中的数据导入文件area.xlsx中,并在文件area.xlsx中根据数据绘制一个图表。如图4-6所示。

图4-6 导入图表并绘制数据