下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

Python处理Excel表格:基于强大又好玩的Openpyxl库

作者:匿名     来源: Python点击数:2106发布时间: 2021-10-25 14:42:04

标签: Python学习Python处理Excel表格

大神带你学编程,欢迎选课

  Python处理Excel表格是经常被用到的,当然在其中也有着很多技术和知识的,进行正确的运用也是非常有必要的,这样才可以更好地进行相关配置,大家跟随小编一起看下Python处理Excel表格——基于强大又好玩的Openpyxl库吧。

  1、Excel 基础概念

  Excel 文件也称做为工作簿。每个工作簿可以包含多个工作表(Sheet)。用户当前查看的表或关闭 Excel 前最后查看的表,称为活动表。

  每一张表都是由列和行构成的。列是以 A 开始的字母表示;而行是以 1 开始的数字表示的。由特定行和列所指定的方格称为单元格。每个单元格都可以包含一个数字或文本。这些单元格就构成了这张表。

  2、安装 openpyxl

  通过 pip 就可以安装最新版的 openpyxl。

  pip install openpyxl

  3、读取 Excel

  假设有这样一份世界人口统计 Excel 文档,内容如下:

  3.1 加载

  导入 openpyxl 模块之后,就可以使用 openpyxl.load_workbook() 函数来加载 Excel 文档咯。这个 Excel 文件表示为 Workbook 对象。

  wb = openpyxl.load_workbook('population.xlsx') print('wb 类型 :') print(type(wb))

  运行结果:

  wb 类型 :

  注意:load_workbook()函数中的文件,必须在当前工作目录。可以导入 os 模块,利用 os.getcwd() 来获悉当前工作目录。os 还提供了 chdir() 方法,可以改变当前工作目录。

  import os print('当前工作目录 :') print(os.getcwd())

  运行结果:

  3.2 读取 Excel 工作表(sheet)

  Workbook 对象的 sheetnames 属性可以获取所有 sheet 表的表名列表。

  Workbook 对象的 active 属性,会获取当前活动表,即打开 Excel 时出现的工作表。

  获取 Worksheet 对象后,我们就可以通过 title 属性得到 sheet 的名称。

  ... print('取得所有工作表的表名 :') print(wb.sheetnames) print('取得某张工作表 :') sheet = wb['Sheet3'] print(type(sheet)) print('表名 - ' + sheet.title) print('取得活动工作表 :') active_sheet = wb.active print('表名 - ' + active_sheet.title)

  运行结果:

  取得所有工作表的表名 : ['Sheet1', 'Sheet2', 'Sheet3'] 取得某张工作表 : 表名 - Sheet3 取得活动工作表 : 表名 - Sheet1

  3.3 读取单元格(Cell)

  可以通过单元格的名字(比如:A1)来获取 Cell 对象。

  Cell 对象的 value 属性,存放的是该单元格中所保存的值。

  Cell 对象的 row、 column 和 coordinate 属性,存放的是该单元格的位置信息。

  用字母来指定列比较奇怪,因此我们也可以通过 sheet 的 cell 方法直接指定行(row)与列(column),来获取单元格 Cell 对象。

  ... print('取得 A1 单元格 :') cell = active_sheet['A1'] print(cell) print(cell.value) print('取得 B1 单元格 :') cell = active_sheet['B1'] print(cell) print(cell.value) print('行号为 ' + str(cell.row) + ',列号为 ' + str(cell.column) + ' 的单元格,其值为 ' + cell.value) print('单元格 ' + cell.coordinate + ' 其值为 ' + cell.value) print('取得 C1 单元格的值 :') print(active_sheet['C1'].value) print('通过指定行与列,来获取单元格:') print(active_sheet.cell(row=1, column=2)) print(active_sheet.cell(row=1, column=2).value) print('迭代行与列,来获取单元格的值:') for i in range(1, 8, 2): print(i, active_sheet.cell(row=i, column=2).value)

  运行结果:

  取得 A1 单元格 : 排名 取得 B1 单元格 : 国家 行号为 1,列号为 2 的单元格,其值为 国家 单元格 B1 其值为 国家 取得 C1 单元格的值 : 人口 通过指定行与列,来获取单元格: 国家 迭代行与列,来获取单元格的值: 1 国家 3 印度 5 印度尼西亚 7 巴基斯坦  

  3.4 获取工作表大小

  Worksheet 对象的 max_row 与 max_column,可以获取工作表的总行数与总列数,即工作表的大小。

  print('获取工作表的大小:') print('总行数 -> ' + str(active_sheet.max_row)) print('总列数 -> ' + str(active_sheet.max_column))

  运行结果:

  获取工作表的大小: 总行数 -> 11 总列数 -> 4

  3.5 列转换函数

  openpyxl 提供了两个函数,用于转换列号:

  openpyxl.utils.get_column_letter -> 会把数字转化为字母。

  openpyxl.utils.column_index_from_string -> 会把字母转化为数字。

  import openpyxl from openpyxl.utils import get_column_letter, column_index_from_string ... print('列转换函数:') print('[数字转换为字母]') print('第 1 列 -> ' + get_column_letter(1)) print('第 2 列 -> ' + get_column_letter(2)) print('第 37 列 -> ' + get_column_letter(37)) print('第 818 列 -> ' + get_column_letter(818)) print('[字母转换为数字]') print('第 A 列 -> ' + str(column_index_from_string('A'))) print('第 CC 列 -> ' + str(column_index_from_string('CC')))

  运行结果:

  列转换函数: [数字转换为字母] 第 1 列 -> A 第 2 列 -> B 第 37 列 -> AK 第 818 列 -> AEL [字母转换为数字] 第 A 列 -> 1 第 CC 列 -> 81

  3.6 切片

  我们可以对 Worksheet 对象切片,取得表格中的一个矩形区域,迭代遍历这个区域中的所有 Cell 对象。

  print(tuple(active_sheet['A2':'D4'])) for row_objects in active_sheet['A2':'D4']: for cell_object in row_objects: print(cell_object.coordinate, cell_object.value) print('-- 当前行获取结束 --')

  运行结果:

  ((, , , ), (, , , ), (, , , )) A2 1 B2 中国 C2 13.83亿人(2016) D2 9634057 -- 当前行获取结束 -- A3 2 B3 印度 C3 1339180127 D3 2973190 -- 当前行获取结束 -- A4 3 B4 美国 C4 324459463 D4 9147420 -- 当前行获取结束 --

  这里首先通过 tuple() 方法,展示出了切片后的所有 Cell 对象。

  然后使用了两个 for 循环,外层 for 循环会遍历这个切片中的每一行;而内层 for 循环会遍历该行中的每个单元格。

  3.7 获取指定行或指定列

  我们可以使用 Worksheet 对象的 rows 和 columns 属性,来获取指定行或者列:

  print('获取特定行:') print(list(active_sheet.rows)[2]) for cell_object in list(active_sheet.rows)[2]: print(cell_object.value) print('获取特定列:') print(list(active_sheet.columns)[2]) for cell_object in list(active_sheet.columns)[2]: print(cell_object.value)

  运行结果:

  获取特定行: (, , , ) 2 印度 1339180127 2973190 获取特定列: (, , , , , , , , , , ) 人口 13.83亿人(2016) 1339180127 324459463 263991379 209288278 197015955 190886311 164669751 143989754 129163276

  Worksheet 对象的 rows 或者 columns 属性,都会返回一个由 “行元组” 构成的元组。每个行元组都拥有该行中的所有Cell 对象。

  可以通过行元组的下标,来访问具体的 Cell 对象。

  4、写入 Excel

  data = open('./data.txt', 'r') outwb = openpyxl.Workbook() # 打开一个将写的文件 outws = outwb.create_sheet(index=0) # 在将写的文件创建sheet i = 1 # 注意:'cell'函数中行列起始值为1 for line in data: for x in range(0,len(line)): outws.cell(column = x+1 , row = i , value = "%s" % line[x]) i += 1 savexlsx = "./results.xlsx" outwb.save(savexlsx) # 保存结果 data.close()

    >>>>>>点击进入Python专题

 

赞(8)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程