Python 处理Excel 文件, openpyxl 库的使用:
创始人
2025-01-15 20:07:05
0

下载:

pip install openpyxl

 基本使用:

新建一个Excel 工作簿:

使用openpyxl 需要先导入一个Workbook 类, 使用它可以创建一个Workbook<工作簿>对象, 也就是创建一个Excel表文件, web.active 可用来激活一个工作表. 我们可以使用它创建的 Websheet<工作表> 对象来调用一些属性或者方法, 例如:wb.title 获取或者设置此表格的标题;

from openxl import Workbook  wb = Workbook()   ws = wb.active  ws.title = "Spider" print(ws.title)  wb.save("test.xlsx")

保存则直接调用创建的 工作簿对象中的 save() 方法即可,需要传递一个路径。

 打开一个Excel 工作簿:

打工作簿使用到openpyxl 提供的 load_workbook 方法即可打开一个工作簿

from openpyxl import Workbook, load_workbook  # 新建一个工作簿 # wb = Workbook() wb = load_workbook("spider.xlsx") # 激活此工作簿 ws = wb.active ws.title = "Spider_Demo" print(ws.title)  wb.save("spider.xlsx")

操作工作表:

 当我们创建出一个工作簿的时候,默认情况下它会自带一个 websheet<工作表>, 我们使用 wb.active 来激活这个默认的工作表就可以获取到 一个 Worksheet 的对象, 如果我们想再增加一个工作表, 则可以调用 Workbook<工作簿> 对象中的create_sheet 方法, 第一个参数传递的是工作表的Title, 第二个参数则是 索引, 这里的索引位置也是从 0 开始的, 对照Excel 表是这样的:

from openpyxl import Workbook   wb = Workbook() print(type(wb))  # 激活默认的工作表 ws1 = wb.active print(type(ws1))  ws2 = wb.create_sheet("Sheet2", 1) ws3 = wb.create_sheet("Sheet3", 2) #  查看所有工作表 print(wb.sheetnames)

同样的, 如果我们打开了一个 excel 文件,而这个文件中已经存在了 Sheet1   Sheet2  Sheet3 等工作表了, 那么我们可以使用 Workbook 对象,然后使用类似与字典取值的方式来获取一个工作表对象,  例如: ws3 = wb["Sheet3"]    这样会返回一个Websheet 对象。

如果我们想要移动一个工作表到其它的位置,例如:将Sheet3 移动到 Sheet2 的位置。

那么我们可以调用 Workbook 对象提供的 move_sheet() 方法, wb.move_sheet()

此方法第一个参数传递的是一个 Websheet 对象, 第二个参数传递的则是一个数字, 如果传递-1 负数, 则为向前移动一个位置, 如果传递的是正数  1  则为向后移动一个位置, 此形参默认值为 0

from openpyxl import Workbook, load_workbook   # wb = Workbook() wb = load_workbook("spider.xlsx")  wb.move_sheet("Sheet4", -2)  print(wb.sheetnames)  # ['Sheet1', 'Sheet4', 'Sheet2', 'Sheet3']

单元格:

一个工作簿中至少有一个工作表, 而一个工作表中,则有很多个单元格:

 使用 Worksheet 对象则可以对单元格进行一系列的操作, 例如 设置值,或者获取值等等。

打开excel观察一下,可以发现:目前选择的单元格为 第五行 第C 列, C5 单元格。

在程序中,可以使用Worksheet 对象, 来直接指定 c5 来设置值或者获取值, 例如:

ws["c5"] = "xxx",

但是官方不建议这么做, 官方提供了一个 cell() 方法, 用来专门处理单元格操作:

from openpyxl import Workbook  wb = Workbook()  ws = wb.active   cell = ws.cell(6 , 1, "999")  print(cell.value)  wb.save("testtest.xlsx")

而使用 Worksheet 对象调用cell() 方法, 第一个参数传递的是 行, 而第二个参数传递的则是 列, 第三个参数 则是要添加的值, 然后它会返回一个  Cell 对象, 然后就可以调用此对象的属性和方法来进行业务处理了,

例如获取 单元格的值: cell.value     获取坐标: cell.coordinate   获取当前单元个的行: cell.row

获取单元格的列: cell.column  等等

使用for 循环添加行和列:

使用for 循环来创建一个 15 行 10 列的单元格。

from openpyxl import Workbook  wb = Workbook()  ws = wb.active  x = 1  for row in range(1, 15+1):     for col in range(1, 10+1):          ws.cell(row, col, x)         x += 1  wb.save("number.xlsx")

 遍历获取单元格内容:

from openpyxl import Workbook  wb = Workbook()  ws = wb.active  x = 1  for row in range(1, 6):     for col in range(1, 5):          ws.cell(row, col, x)         x += 1   print(ws["a:c"]) # 获取 a ~ c 列的单元格内容   print(ws[1:3]) # 获取 1 ~ 3 行的单元格内容  print(ws["a1:d4"]) # 获取 a1 ~ d4 的内容  # 遍历 a1 ~ d4 的单元格 for cells in ws["a1:d4"]:     for cell in cells:         print(cell.value)   print(ws.iter_rows()) # 获取行 print(ws.iter_cols())  # 获取列  # 按行遍历 for rows in ws.iter_rows():     for row in rows:         print(row.value)   # 按列遍历 for cols in ws.iter_cols():     for col in cols:         print(col.value)   wb.save("number.xlsx")

查看iter_rows() 和iter_cols() 方法的源码可以看到:

它是可以传递一个最小行,最小列,最大行,最大列的参数的, 如果不传入,则默认获取全部!

操作单元格:

合并单元格:

 调用 Workseet 对象提供的 merge_cells() 和 unmerge_cells() 方法可以完成 合并单元格和取消合并单元格的功能, 但是需要注意的是, 合并后的单元格会将单元格中原有的数据丢失, 只保留最左上角的单元格数据。

# 合并 b2 - d4 的单元格 ws.merge_cells("b2:d4") # 取消合并 ws.unmerge_cells("b2:d4")  wb.save("test.xlsx")

源码中可以发现, 它同样特工了 start_row 等形参, 分别是开始行, 结束行,开始列,结束列,如果有需要也可以通过这几个形参来控制要合并的 单元格。

 插入单元格:

 Workseet 对象提供了insert_cols   insert_rows 两个方法可以完成单元格的插入操作:

ws.insert_cols(2, 3) # 从第二列开始插入3 列单元格   ws.insert_rows(1, 4) # 从第一行开始, 插入4 行单元格

删除单元格:

ws.delete_cols(2, 2) # 从第二列开始,删除2 列单元格   ws.delete_rows(3, 4) # 从第三行开始, 删除 4 行单元格 

 移动单元格:

ws.move_range("c4:d5", 2, -2)  # 选择c4:d5 范围的单元格 向下移动两行 后再向左移动两列

 

相关内容

热门资讯

一分钟内幕!科乐吉林麻将系统发... 一分钟内幕!科乐吉林麻将系统发牌规律,福建大玩家确实真的是有挂,技巧教程(有挂ai代打);所有人都在...
一分钟揭秘!微扑克辅助软件(透... 一分钟揭秘!微扑克辅助软件(透视辅助)确实是有挂(2024已更新)(哔哩哔哩);1、用户打开应用后不...
五分钟发现!广东雀神麻雀怎么赢... 五分钟发现!广东雀神麻雀怎么赢,朋朋棋牌都是是真的有挂,高科技教程(有挂方法)1、广东雀神麻雀怎么赢...
每日必看!人皇大厅吗(透明挂)... 每日必看!人皇大厅吗(透明挂)好像存在有挂(2026已更新)(哔哩哔哩);人皇大厅吗辅助器中分为三种...
重大科普!新华棋牌有挂吗(透视... 重大科普!新华棋牌有挂吗(透视)一直是有挂(2021已更新)(哔哩哔哩)1、完成新华棋牌有挂吗的残局...
二分钟内幕!微信小程序途游辅助... 二分钟内幕!微信小程序途游辅助器,掌中乐游戏中心其实存在有挂,微扑克教程(有挂规律)二分钟内幕!微信...
科技揭秘!jj斗地主系统控牌吗... 科技揭秘!jj斗地主系统控牌吗(透视)本来真的是有挂(2025已更新)(哔哩哔哩)1、科技揭秘!jj...
1分钟普及!哈灵麻将攻略小,微... 1分钟普及!哈灵麻将攻略小,微信小程序十三张好像存在有挂,规律教程(有挂技巧)哈灵麻将攻略小是一种具...
9分钟教程!科乐麻将有挂吗,传... 9分钟教程!科乐麻将有挂吗,传送屋高防版辅助(总是存在有挂)1、完成传送屋高防版辅助透视辅助安装,帮...
每日必看教程!兴动游戏辅助器下... 每日必看教程!兴动游戏辅助器下载(辅助)真是真的有挂(2025已更新)(哔哩哔哩)1、打开软件启动之...