python实例学习之openpyxl库

2022-08-05 13:29:13

找了点例题学了学

1 openpyxl库

基本操作

网上已经很详细了,学一学 /呲牙笑
Openpyxl超详细笔记
Openpyxl 教程

2 实例一

2.1 问题详述

批量修改excel中多个工作表的内容
针对类似财务报表之类的,如果都为同一格式的工作表,要修改的位置和内容都一样,便可使用python简单操作。
如一个excel中有很多的工作表,每个工作表为每日的出库单或者入库单,需要改变的是表头或者标题或者一些固定单元格,就用标题来做例题吧。

2.2 实现过程

1)load_workbook方法
openpyxl库中我们需要用到load_workbook方法
from openpyxl import load_workbook
该方法使用:load_workbook(filename, read_only=False,keep_vba=KEEP_VBA, data_only=False, keep_links=True)

参数含义:
filename 文件名:打开的路径或一个类文件对象
read_only:优化阅读,内容不能编辑
keep_vba:保存vba内容
data_only:控制带有公式的单元格是否具有公式(默认值)或上次Excel读取工作表时存储的值
keep_links:是否应保留对外部工作簿的链接。默认为True

作用:打开给定的文件名并返回工作簿

2)加载工作簿
wb = load_workbook("领料单(每日).xlsx")
openpyxl处理xlsx后缀的文件

3)获取工作簿的所有工作表名
sheet_names=wb.get_sheet_names()

4)改变目标单元格的值
需要先指定工作表:
ws=wb[sheet_name]
然后改变指定单元格的值(如A4单元格)
ws['A4'].value="改变后的值"

5)遍历工作表,改变单元格的值

for sheet_namein sheet_names: 
    ws=wb[sheet_name]
    ws['A4'].value="改变后的值"

6)保存
wb.save(“领料单(每日)-更改后.xlsx”)
代码示例:

from openpyxlimport load_workbook
wb= load_workbook("领料单(每日).xlsx")
sheet_names=wb.get_sheet_names()for sheet_namein sheet_names: 
    ws=wb[sheet_name]
    ws['A4'].value="改变后的值"
wb.save("领料单(每日)-更改后.xlsx")

2.3 遍历多个工作簿

如果这些表格不是以工作表的形式同意存在于一个工作簿中,而是以一个一个xlsx文件存于文件夹中,那么遍历的就不是工作表而是文件了。这次需要引进os库
import os
1)先得到文件夹内所有的文件名

import os
path='D:\\pyfile\\xlfile'# 文件夹路径
files= os.listdir(path)

2)然后类似上边遍历工作表一样遍历文件即可。

3 实例二

3.1 问题叙述

在excel业务表格中查找及替换数据
其中我们有包含替换内容的表格,用来查找替换内容
还有如图右侧的表格,需要查找和替换操作的表格
在这里插入图片描述

3.2 操作过程

1)将左侧表格的内容转换为字典
键为‘查找内容’,值为‘替换内容’

from openpyxlimport load_workbook# 读取工作薄
wb1= load_workbook('查找替换.xlsx')
ws1= wb1.active

data={}for rowinrange(2,ws.max_row+1):
    search=str(ws['A'+str(row)].value)
    displace=str(ws['B'+str(row)].value)
    data[search]= displace

2)将右侧表格需要查找修改的内容存入列表中
注:打开表格发现,有些单元格的值为None,在后续处理中需要注意这点

wb2= load_workbook('原表.xlsx')
ws2= wb2.active
id_list=[]for rowinrange(2,ws2.max_row+1):id= ws2['D'+str(row)].value
    id_list.append(id)

3)单元格内容查找对比并替换
我们采用的方法为——in,遍历列表值
而表格单元值中还有‘说明码:’的字样,需要用split函数来分割,这时候就需要注意上一步骤提到的,‘None’值,需要加入一个if函数来区分

code=[]for iin id_list:if i==None:
        code.append(None)else:
        code.append(i.split(':')[-1])for iinrange(len(code)):if code[i]in data:
        ws2.cell(row=i+2, column=4).value= id_list[i].split(':')[0]+':'+data[code[i]]

4)保存更改后的文件

wb2.save('替换后.xlsx')
  • 作者:柯西西西西
  • 原文链接:https://blog.csdn.net/kexiiii/article/details/119921261
    更新时间:2022-08-05 13:29:13