Py学习  »  Python

使用 Python 操作 Excel 单元格(2)

Excel之家ExcelHome • 1 年前 • 259 次点击  

7.2.2扩展单元格区域

示例文件中的“数据透视表”工作表如图 7-4 所示。

以下示例代码使用 expand 函数实现扩展单元格区域,即由某个(或者多个)单元格扩展至单元格区域。 

代码解析

第 1 行代码导入 xlwings 模块,设置别名为 xw。

第 2 行代码导入 os 模块。

第 3 行代码指定 Excel 示例文件名称。

第 4 行代码使用 os 模块的 path.dirname 函数获取 Python 文件所在目录,其中 __file__ 属性返回Python 文件的全路径。

第 5 行代码使用 os 模块的 path.join 函数连接目录名和文件名获取全路径,其中 dest_path 为当前目录,file_name 为文件名。

第 6 行代码启动 Excel 应用程序(处于隐藏状态)。

第 7 行代码打开指定的 Excel 文件。

第 8 行代码使用名称引用工作表,并将工作表中 A3 单元格对象的引用赋值给变量 topleft。

第 9 行代码中 expand 函数的参数为“down”,即由单元格 A3 向下扩展至单元格 A12。

expand 函数的语法格式为 expand(mode),其中参数 mode 指定单元格区域扩展的方式,其可选值如表 7-2 所示。 

 

7.2.3定位区域中的边界单元格

示例文件中的“数据透视表”工作表如图 7-5 所示。 

代码解析

第 1 行代码导入 xlwings 模块,设置别名为 xw。

第 2 行代码导入 os 模块。

第 3 行代码指定 Excel 示例文件名称。

第 4 行代码使用 os 模块的 path.dirname 函数获取 Python 文件所在目录,其中 __file__ 属性返回Python 文件的全路径。

第 5 行代码使用 os 模块的 path.join 函数连接目录名和文件名获取全路径,其中 dest_path 为当前目录,file_name 为文件名。

第 6 行代码启动 Excel 应用程序(处于隐藏状态)。

第 7 行代码打开指定的 Excel 文件。

第 8 行代码使用名称引用工作表,并将工作表中 C8 单元格对象的引用赋值给变量 cell。

第 9 行代码使用 current_region 属性获取 C8 单元格的当前区域。

第 10~16 行代码输出单元格区域的相关信息。

第 10 行代码使用 address 属性获取当前区域的引用地址。

第 11 行代码使用 last_cell 属性定位当前区域的右下角单元格,此单元格有时被称为该单元格区域的“最后单元格”。

第 12 行代码中的 current_rng[0] 代表区域中的第一个单元格,即左上角单元格。

第 13~16 行代码使用 end 函数定位区域边界单元格。

end 函数的语法格式为 end(direction),其中参数 direction 指定定位方向,其可选值如表 7-4 所示。 

第 17 行代码关闭工作簿。

运行示例代码后,输出结果如下所示。 

7.2.4定位工作表中的数据区域

示例文件中的“数据透视表”工作表如图 7-6 所示。  

代码解析

第 1 行代码导入 xlwings 模块,设置别名为 xw。

第 2 行代码导入 os 模块。

第 3 行代码指定 Excel 示例文件名称。

第 4 行代码使用 os 模块的 path.dirname 函数获取 Python 文件所在目录,其中 __file__ 属性返回Python 文件的全路径。

第 5 行代码使用 os 模块的 path.join 函数连接目录名和文件名获取全路径,其中 dest_path 为当前目录,file_name 为文件名。

第 6 行代码启动 Excel 应用程序(处于隐藏状态)。

第 7 行代码打开指定的 Excel 文件。

第 8 行代码使用名称引用工作表,并将工作表对象的引用赋值给变量 wsheet。

第 9~10 行代码中的 wsheet.cells 代表工作表中的全部单元格(无论单元格是否被使用),shape 属性的返回值为包含两个元素的元组,对于 Excel 2007 及以上版本,返回值为“(1048576, 16384)”,第一个元素为总行数,第二个元素为总列数。

第 11~12 行代码输出结果如下所示。 

工作表的数据行数通常是不固定的,在代码中经常需要使用 end 函数定位数据区域范围,end 函数的详细讲解请参阅 7.2.3 小节。

第 14 行代码由第一列最后一个单元格(即 A1048576)向上查找(end 函数的参数设置为“up”),定位 A 列有数据的最后单元格。

由于 Excel 97-2003 格式工作簿 (*.xls) 与 Excel 2007 格式工作簿(*.xls*)的工作表最大行数和列数存在差异,因此代码中使用行号为 rows_cnt 的 A 列单元格作为起始位置,使代码具有更好的通用性。

第 15 行和第 19 行代码使用 address 属性返回单元格的引用地址。

与此类似,第17行代码由第一行最后一个单元格(即XFD1)向左查找(end函数的参数设置为“left”),定位第一行有数据的最后单元格。

第 18 行代码中 address 属性返回单元格的绝对引用(例如:$F$1),split 函数使用 $ 作为分隔符,将字符串拆分为数组,其中第二个元素为该列的列名。

第 16 行和第 20 行代码使用 row 属性和 column 属性返回单元格的行号和列号。

运行示例代码后,输出结果如下所示。 

好书推荐

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/166093
 
259 次点击