Excel的公式去掉闵行区的“街道居委会”区和之间删除IFERROR(LEFT(AB2,FIND(区,AB2)) MID(AB2,FIND(),AB2, FIND(区,AB2))1,999),AB2)去掉上海闵行的“区 弄”重复的IFERROR(LEFT(AD2,FIND(区,AD2))MID(MID(AD2,FIND(区,AD2)1,999),FIND(弄,MID(AD2,FIND(区,AD2)1,999))1,999),AD2)一、背景需求过去几年我下载园园通的幼儿信息、地址、发现地址总是特别长——包含了上海市(省、上海市市、闵行区区、街道XXX街道、居委XXX居委会X一居委、路、弄、号、名。之前用Python提取正则去除重复的文字【办公类-112-03】20250904儿童基本情况登记户籍去重居委会正则去重重复字段运用https://mp.csdn.net/mp_blog/creation/editor/151194187以上用Python去重但是只是在下载的Excel里面制作没有重新改变园园通里的地址格式。三二、手工去除长地址本次我想从园园通下载中班的户籍地址和居住地址然后在Excel里用公式或手动删除方式把所有地址变成规范地址“省市区路弄号”去重、补全省市区一园园通中班幼儿信息下载多年来中大班园园通的幼儿地址最大的问题就的“居住地址”太长了因为它把左侧的“省市区街道居委”路弄号室都包含了。导出后二数据处理1.现居地址筛选排序降序——都是超长地址所以我们要批量去掉所有的居委会去掉两个“上海市”去掉街道没有闵行区人工补“室”补了12个室发现一个没写全地址的把区和之间的的内容删除#这是EXCEL IFERROR(LEFT(AH2,FIND(区,AH)) MID(A1,FIND(,AH2, FIND(区,AH2))1,999),AH2)发现“路和弄”出现了两次需要删除一次我还是用第一种#EXCEL LEFT(A1,FIND(区,A1))MID(MID(A1,FIND(区,A1)1,999),FIND(弄,MID(A1,FIND(区,A1)1,999))1,999)把A1替换成AH2从第2行开始人工筛选参照原始地址筛选添补缩减。把所有地址弄得差不多长本园附近的地址都是差不多结构“上海市闵行区XX路XX弄XX号X室2.修改户籍地址大量外省市的先用刚才的方法处理上海市闵行区的内容先复制一份到右侧以免搞错了数据居右排列补“室删除两个“上海市”删除街道删除“区”和“)”之间的数据这个括号要复制里面的括号有大小写不同IFERROR(LEFT(A1,FIND(区,A1)) MID(A1,FIND(),A1, FIND(区,A1))1,999),A1)IFERROR(LEFT(AB8,FIND(区,AB8)) MID(AB8,FIND(),AB8, FIND(区,AB8))1,999),AB8)只有上海闵行的地区里面的街道居委被去掉了去掉上海里面的重复的内容但是要手动添补LEFT(AC2,FIND(区,AC2))MID(MID(AC2,FIND(区,AC2)1,999),FIND(弄,MID(AC2,FIND(区,AC2)1,999))1,999)只有部分上海市闵行区的上海所有区的地址都手动修改了外省市地址是 省市重复我问豆包要了集中代码但是都没有删除“省市区县”的重复最后还是手动说不清楚有些是重复的有些就是正好发现一组规律前面三个正好是之前按钮选择“省市区”后面两个是家长填写的户口地址“只有省和区”不包含“市”可能户口本上的地址就是这样写的有的家长户口本上包含了省市区所以就写全了手动删减后把短地址放到AA列文本值”黏贴一共142预设每次35人分4次由此中班幼儿的户籍地址和居住地址都改成标准地址了三、代码运行用新地址短地址替换园园通里的长地址火狐浏览器100% 园园通中班孩子 两个地址补全省市区再次写入园园通。 火狐浏览器必须100% 为防止园园通变慢30-40人一组。完成后关闭园园通再次开启 豆包阿夏 20260819 import openpyxl import pyautogui import time import pyperclip import pygetwindow as gw # 1. 找到VSCode窗口匹配标题含 Visual Studio Code vscode_wins gw.getWindowsWithTitle(Visual Studio Code) if not vscode_wins: print(未找到VSCode窗口请先打开VSCode再运行) else: win vscode_wins[0] # 自动最小化VSCode win.minimize() print(VSCode已自动最小化你有5秒时间移动鼠标到目标位置) time.sleep(5) # 等待5秒给你放鼠标 import random # 随机休眠1~3秒带小数模拟真人操作 def rand_sleep(): t random.uniform(2, 3) time.sleep(t) file_path rC:\Users\mhjg2\Desktop\20260805园园通小班分班\20260819中班幼儿地址补全.xlsx wb openpyxl.load_workbook(file_path) # 读取表格 for sheet_name in wb.sheetnames: ws wb[sheet_name] # for row in ws.iter_rows(min_row51, values_onlyTrue): # 从第二行开始读取姓名 # for row in ws.iter_rows(min_row2, max_row36, values_onlyTrue): # 做测试第一组人员防止园园通卡通。 36杨 # for row in ws.iter_rows(min_row36, max_row67, values_onlyTrue): # 做测试第2组人员防止园园通卡通。36还是杨 67汪 要从68开始35 68刘 # for row in ws.iter_rows(min_row68, max_row103, values_onlyTrue): # 第3组 # for row in ws.iter_rows(min_row104, max_row141, values_onlyTrue): #第4组 for row in ws.iter_rows(min_row142, max_row142, values_onlyTrue): #第4组 # for row in ws.iter_rows(min_row21, values_onlyTrue): # 如果出问题断了从第X行读取孩子姓名 name row[2] # 姓名3 Registered_Address row[26] # 户口地址27 Residential_Address row[34] # 居住地址35 # print(name,Residential_Address) # 点击姓名栏 pyautogui.click(861,376) # 1. 复制指定文字到剪贴板 # print(写入姓名:,name) pyperclip.copy(name) # 2. 模拟CtrlV粘贴 pyautogui.hotkey(ctrl, v) rand_sleep() # 延迟2秒切换窗口 # 搜索 pyautogui.click(758,497) rand_sleep() # 编辑 pyautogui.click(1652,671) time.sleep(3) # 模拟滚动到底部 pyautogui.click(1652,671) for _ in range(2): pyautogui.scroll(-1000) rand_sleep() # time.sleep(0.3) # 每滚轮一下间隔0.3秒 # 户籍地址点击三次 for i in range(3): pyautogui.click(1404,473) rand_sleep() # 1. 复制指定文字到剪贴板 # print(写入姓名:,name) pyperclip.copy(Registered_Address) # 2. 模拟CtrlV粘贴 pyautogui.hotkey(ctrl, v) rand_sleep() # 延迟2秒切换窗口 # 居住地址点击三次 for i in range(3): pyautogui.click(1173,771) rand_sleep() # 1. 复制指定文字到剪贴板 # print(写入姓名:,name) pyperclip.copy(Residential_Address) # 2. 模拟CtrlV粘贴 pyautogui.hotkey(ctrl, v) rand_sleep() # 延迟2秒切换窗口 # 下移到底部 for _ in range(1): pyautogui.scroll(-1000) rand_sleep() # 确认回到最初的界面 pyautogui.click(1027,857) time.sleep(6) # 保存时间长一点 # 自动最大化VSCode win.maximize() print(VSCode已自动最大化程序结束)园园通运行时间久了就会卡顿所以我把142人拆分成4组每组35人左右运行了五次每一次35人运行大约平均18分钟。运行过程中拍的照片四、验证成果一再次下载园园通中班幼儿数据二地址列做升序检查户口地址升序-格式非常统一还是有“漏网之鱼”数量较少在园园通里人工修改中班就完工了。五、制作大班双地址优化同理制作大班也是超长地址一下载园园通 大班幼儿的所有数据二隐藏不需要的列保留姓名户籍地址、现居地址也是超长地址三修改现居地址IFERROR(LEFT(A1,FIND(区,A1)) MID(A1,FIND(),A1, FIND(区,A1))1,999),A1)同样方式做户籍地址先升序。右侧插入空列IFERROR(LEFT(AA2,FIND(区,AA2)) MID(AA2,FIND(),AA2, FIND(区,AA2))1,999),AA2)只有地址变成“值”才能进行内容替换才能被其他单元格援引数据。去掉居委会居右补“室”右侧插入空列IFERROR(LEFT(AB2,FIND(区,AB2))MID(MID(AB2,FIND(区,AB2)1,999),FIND(弄,MID(AB2,FIND(区,AB2)1,999))1,999),AB2)上海其他区域地址人工批量把整列贴成“值”上海的其他区县的*街道 居委都是其他”要手动删除外省户籍也是两款四户籍地址修改外省地址需要手动修改。如果识别出原理应该也能用公式制作现在还做不出来。五大班双地址短地址也要在园园通内修改掉一共157人按40人一组分4次生成 园园通中班孩子 两个地址补全省市区再次写入园园通。 火狐浏览器必须100% 为防止园园通变慢30-40人一组。完成后关闭园园通再次开启 豆包阿夏 20260819 import openpyxl import pyautogui import time import pyperclip import pygetwindow as gw # 1. 找到VSCode窗口匹配标题含 Visual Studio Code vscode_wins gw.getWindowsWithTitle(Visual Studio Code) if not vscode_wins: print(未找到VSCode窗口请先打开VSCode再运行) else: win vscode_wins[0] # 自动最小化VSCode win.minimize() print(VSCode已自动最小化你有5秒时间移动鼠标到目标位置) time.sleep(5) # 等待5秒给你放鼠标 import random # 随机休眠1~3秒带小数模拟真人操作 def rand_sleep(): t random.uniform(2, 3) time.sleep(t) file_path rC:\Users\mhjg2\Desktop\20260805园园通小班分班\20260819大班幼儿地址补全.xlsx wb openpyxl.load_workbook(file_path) # 读取表格 for sheet_name in wb.sheetnames: ws wb[sheet_name] # for row in ws.iter_rows(min_row51, values_onlyTrue): # 从第二行开始读取姓名 for row in ws.iter_rows(min_row2, max_row42, values_onlyTrue): # 做测试第一组人员防止园园通卡通。 36杨 # for row in ws.iter_rows(min_row43, max_row83, values_onlyTrue): # 做测试第2组人员防止园园通卡通。36还是杨 67汪 要从68开始35 68刘 # for row in ws.iter_rows(min_row84, max_row124, values_onlyTrue): # 第3组 # for row in ws.iter_rows(min_row125, max_row159, values_onlyTrue): #第4组 # for row in ws.iter_rows(min_row21, values_onlyTrue): # 如果出问题断了从第X行读取孩子姓名 name row[2] # 姓名3 Registered_Address row[26] # 户口地址27 Residential_Address row[33] # 居住地址34 print(name,Residential_Address) # # 点击姓名栏 # pyautogui.click(861,376) # # 1. 复制指定文字到剪贴板 # # print(写入姓名:,name) # pyperclip.copy(name) # # 2. 模拟CtrlV粘贴 # pyautogui.hotkey(ctrl, v) # rand_sleep() # 延迟2秒切换窗口 # # 搜索 # pyautogui.click(758,497) # rand_sleep() # # 编辑 # pyautogui.click(1652,671) # time.sleep(3) # # 模拟滚动到底部 # pyautogui.click(1652,671) # for _ in range(2): # pyautogui.scroll(-1000) # rand_sleep() # # time.sleep(0.3) # 每滚轮一下间隔0.3秒 # # 户籍地址点击三次 # for i in range(3): # pyautogui.click(1404,473) # rand_sleep() # # 1. 复制指定文字到剪贴板 # # print(写入姓名:,name) # pyperclip.copy(Registered_Address) # # 2. 模拟CtrlV粘贴 # pyautogui.hotkey(ctrl, v) # rand_sleep() # 延迟2秒切换窗口 # # 居住地址点击三次 # for i in range(3): # pyautogui.click(1173,771) # rand_sleep() # # 1. 复制指定文字到剪贴板 # # print(写入姓名:,name) # pyperclip.copy(Residential_Address) # # 2. 模拟CtrlV粘贴 # pyautogui.hotkey(ctrl, v) # rand_sleep() # 延迟2秒切换窗口 # # 下移到底部 # for _ in range(1): # pyautogui.scroll(-1000) # rand_sleep() # # 确认回到最初的界面 # pyautogui.click(1027,857) # time.sleep(6) # 保存时间长一点 # # 自动最大化VSCode # win.maximize() # print(VSCode已自动最大化程序结束)六验证有没有遗漏因为没法单独把中班和大班一起挑出来所以我下载全部孩子的地址先查看居住地地址长度统一这个地址补全应该是XXX路210弄不是小区名称再看户籍地址有缺失少一个市筛选一遍以后再园园通里修改七第二次下载全园幼儿数据然后再次下载全园的rar进行筛查。总会发现一些问题三个孩子一个户籍原来是公共户口其他户籍地址没有问题。五、感悟如果再下载说不定也会发现细枝末节的小问题。所以数据的精准考人力检查是很难做到的。但是现阶段可以借助一部分Python处理但更多还是要人力检验。