python在excel中搜索和替换

目录

sheet1页内搜索的示例:

在整个workbook中搜索:

find的输入参数:

替换并搜索的结果


在使用win32com在excel搜索时,如果是遍历较大范围的单元格,会很慢,慢到你怀疑人生。

这时可以用range的方法find和findnext,来实现快速检索。

搜索方法:在一个range内搜索,如果返回的结果不是none,那就调用findnext,继续搜索下一个。

需要注意的是,当搜索到range内底部时,再次调用findnext,它会从range的开始位置,重新搜索哈。如果只期望检索一次,需要加一定的条件退出搜索。否则,就会进入一种死循环。

这个条件可以是搜索返回的结果的address超出一定条件。例如,地址比上次搜索结果靠上,这说明重新开始搜索了。

示例excel文档:

sheet1和sheet2的内容一样。sheet2用于演示遍历sheet的搜索

sheet1页内搜索的示例:

import win32com.client as win32
from win32com.client import constants
import os
# 打开PPT文件
xls_app = win32.gencache.EnsureDispatch('Excel.Application')
xls_app.Visible = True
curr_path = os.getcwd()# 获取当前路径
file_path = curr_path + r'\搜索和替换示例.xlsx'
wb = xls_app.Workbooks.Open(file_path)

#在sheet1中搜索
sht = wb.Worksheets("sheet1")# 或者 wb.Worksheets(1)
rng = sht.UsedRange #在页面中所有使用的范围
rtn = rng.Find("四川") # rtn得到的是一个range对象
# while( rtn is not None):
old_row = 0
old_column = 0

while(rtn.Row > old_row  or  rtn.Column > old_column):
	print(rtn.Row, rtn.Column)
	old_row = rtn.Row
	old_column = rtn.Column
	rtn = rng.FindNext(rtn)

运行结果:

使用地址来判断,也是被迫无奈。因为搜索到最后一个叫后,再执行,就回跳回首个。

vba的示例代码说搜索到最后一个后,会返回空。但是win32com看起来不是。

所以只能通过地址来判断。

在整个workbook中搜索:

import win32com.client as win32
from win32com.client import constants
import os
# 打开PPT文件
xls_app = win32.gencache.EnsureDispatch('Excel.Application')
xls_app.Visible = True
curr_path = os.getcwd()# 获取当前路径
file_path = curr_path + r'\搜索和替换示例.xlsx'
wb = xls_app.Workbooks.Open(file_path)
#在所有sheet中搜索
for sht in wb.Worksheets:#遍历每页
	rng = sht.UsedRange #在页面中所有使用的范围
	rtn = rng.Find("四川") # rtn得到的是一个range对象
	# while( rtn is not None):
	old_row = 0
	old_column = 0

	while(rtn.Row > old_row  or  rtn.Column > old_column): #通过判断地址是否在增加来区分是否搜索完成
		print(sht.Name, rtn.Row, rtn.Column)
		old_row = rtn.Row
		old_column = rtn.Column
		rtn = rng.FindNext(rtn)

运行结果:

find的输入参数:

替换并搜索的结果

直接使用Range.Replace方法就可以完成搜索和替换

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值