【办公类110-05】20260807园园通小班“待补充”户籍地址自动修改(Python+EXCEL)

一、背景需求

通知要求8月7日前把园园通新小班建班、幼儿分班、信息完善(待处理问题)完成。

为了取消标红,

我用了一个批量填写"假地址"的方法。确保标红的内容都被填全。

【办公类110-04】20260806园园通小班分班后"待处理问题"(批量信息、默认省市区、待添加地址)https://mp.csdn.net/mp_blog/creation/editor/163531430

其他数据重要性不大,户籍地址是最重要的,必须要填写正确,目前"园园通"里面的外省户籍地址都是"待补充"

二、数据收集

因为幼儿纸质报名表上没有"外省户籍地址",只有外省(省),连外省(市)、外省(区)也没有。

组长说她可以马上向家长收集"户籍地址"

所以组长让小班组员去问家长要名单。

我用接龙管家做了一套

既然做了表单,我又添加一个"独生子女统计"

这个模版发给组长,让组员们复制。

小班组员们打电话来问:"我不会把里面的姓名改成我们班孩子,你能帮我改一下吗"

之前正好收集了18个班级姓名表单

里面有所有托班、小班的幼儿姓名、性别

我希望在幼儿姓名前面添加"学号",就在"共享表单"里,做一个学号和姓名的连接

复制整列"学号+姓名"

打开接龙管家模版

设置名单

把包含班级名字的接龙表单发给班主任,再抄送管理员权限

三、表单下载

组长速度最快

打开表单,里面有所有需要填写的项目

虽然其他信息也要修改(我都是默认选否、默认非农-城市)但最重要的是先修改"户籍地址"

从表格里看,我需要读取A列"姓名"和E列"户籍地址"

python 复制代码
'''
园园通小班孩子分班后补全信息
1.外省户口孩子更新地址(只更新地址,把待更新改掉)
3.Python模拟鼠标点击园园通按钮,进行分班
4.前期已经3101搜索过了。
'''


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 = r"C:\Users\mhjg2\Desktop\20260805园园通小班分班\20260805班级信息表.xlsx"
file_path = r"C:\Users\mhjg2\Desktop\20260805园园通小班分班\20260806小1班圆圆通信息补全(1).xlsx"

wb = openpyxl.load_workbook(file_path)


# 读取表格
for sheet_name in wb.sheetnames:
    ws = wb[sheet_name]
    for row in ws.iter_rows(min_row=2, values_only=True):        # 从第二行开始读取姓名
    # for row in ws.iter_rows(min_row=24, values_only=True):    # 如果出问题,断了,从第X行读取孩子姓名
        if len(row) < 4:
            continue
        name = row[0]
        if not name or str(name).strip() == "":
            continue  
        address = row[4]      
        # class_name = row[1]
        # garden_name = row[1]
        # data_list.append([class_name, name])
        print(name)
        print(address)


         # 点击姓名栏,
        pyautogui.click(861,376)
        # 1. 复制指定文字到剪贴板
        # print('写入姓名:',name)
        pyperclip.copy(name)
        # 2. 模拟Ctrl+V粘贴
        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(address)
        # 2. 模拟Ctrl+V粘贴
        pyautogui.hotkey("ctrl", "v")
        rand_sleep()  # 延迟2秒切换窗口

        # 下移到底部
        for _ in range(1):
            pyautogui.scroll(-1000)
        rand_sleep()


        # 确认,回到最初的界面
        pyautogui.click(1027,857)
        time.sleep(5)    # 保存时间长一点

# 自动最大化VSCode
win.maximize()
print("VSCode已自动最大化,程序结束")

因为幼儿信息保密,所以不能展示图片或视频。

反正我使用代码读取小1班的姓名,和对应地址,顺利将"待补充"批量改成"正确地址"

小3班老师也很快发来了接龙表单

表单路径修改一下

python 复制代码
'''
园园通小班孩子分班后补全信息
1.外省户口孩子更新地址(只更新地址,把待更新改掉)
3.Python模拟鼠标点击园园通按钮,进行分班
4.前期已经3101搜索过了。
'''


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 = r"C:\Users\mhjg2\Desktop\20260805园园通小班分班\20260805班级信息表.xlsx"
# file_path = r"C:\Users\mhjg2\Desktop\20260805园园通小班分班\20260806小1班圆圆通信息补全(1).xlsx"
file_path = r"C:\Users\mhjg2\Desktop\20260805园园通小班分班\20260806小3班圆圆通信息补全.xlsx"

wb = openpyxl.load_workbook(file_path)


# 读取表格
for sheet_name in wb.sheetnames:
    ws = wb[sheet_name]
    for row in ws.iter_rows(min_row=2, values_only=True):        # 从第二行开始读取姓名
    # for row in ws.iter_rows(min_row=24, values_only=True):    # 如果出问题,断了,从第X行读取孩子姓名
        if len(row) < 4:
            continue
        name = row[0]
        if not name or str(name).strip() == "":
            continue  
        address = row[4]      
        # class_name = row[1]
        # garden_name = row[1]
        # data_list.append([class_name, name])
        print(name)
        print(address)


         # 点击姓名栏,
        pyautogui.click(861,376)
        # 1. 复制指定文字到剪贴板
        # print('写入姓名:',name)
        pyperclip.copy(name)
        # 2. 模拟Ctrl+V粘贴
        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(address)
        # 2. 模拟Ctrl+V粘贴
        pyautogui.hotkey("ctrl", "v")
        rand_sleep()  # 延迟2秒切换窗口

        # 下移到底部
        for _ in range(1):
            pyautogui.scroll(-1000)
        rand_sleep()


        # 确认,回到最初的界面
        pyautogui.click(1027,857)
        time.sleep(5)    # 保存时间长一点

# 自动最大化VSCode
win.maximize()
print("VSCode已自动最大化,程序结束")

25个孩子大约12分钟

小4班的表单来了,这份不是我设计的模版,班主任收集了一些幼儿的基础信息

家长自己填写的省市,就很不完整,缺少区,还是要用接龙管家里面的"省市区"

不过地址有的

这个文件上有个图标,看看Python能不能识别,结果是可以显示图片

地址修改了,还有一个外省的"市""区"

接龙表单里我们收集了家长填写的省市区,

如何拆分成开来,并且能

python 复制代码
'''
园园通小班孩子分班后补全信息
1.外省户口孩子更新地址(只更新地址,把待更新改掉)
3.Python模拟鼠标点击园园通按钮,进行分班
4.前期已经3101搜索过了。
'''


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 = r"C:\Users\mhjg2\Desktop\20260805园园通小班分班\20260805班级信息表.xlsx"
# file_path = r"C:\Users\mhjg2\Desktop\20260805园园通小班分班\20260806小1班圆圆通信息补全(1).xlsx"
# file_path = r"C:\Users\mhjg2\Desktop\20260805园园通小班分班\20260806小3班圆圆通信息补全.xlsx"
# file_path = r"C:\Users\mhjg2\Desktop\20260805园园通小班分班\小4学生信息收集表_群收集.xlsx"
file_path = r"C:\Users\mhjg2\Desktop\20260805园园通小班分班\小5班圆圆通信息填写收集(1).xlsx"

wb = openpyxl.load_workbook(file_path)


# 读取表格
for sheet_name in wb.sheetnames:
    ws = wb[sheet_name]
    for row in ws.iter_rows(min_row=2, values_only=True):        # 从第二行开始读取姓名
    # for row in ws.iter_rows(min_row=21, values_only=True):    # 如果出问题,断了,从第X行读取孩子姓名
        if len(row) < 4:
            continue
        name = row[0]
        # name = row[4]        # 小四班姓名在第五列
        if not name or str(name).strip() == "":
            continue  
        # address = row[4] 
        # address = row[10]    # 小四班户籍详细地址在第11列  
        address = row[11]    # 小五班户籍详细地址在第12列  
        # class_name = row[1]
        # garden_name = row[1]
        # data_list.append([class_name, name])
        print(name)
        print(address)


         # 点击姓名栏,
        pyautogui.click(861,376)
        # 1. 复制指定文字到剪贴板
        # print('写入姓名:',name)
        pyperclip.copy(name)
        # 2. 模拟Ctrl+V粘贴
        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(address)
        # 2. 模拟Ctrl+V粘贴
        pyautogui.hotkey("ctrl", "v")
        rand_sleep()  # 延迟2秒切换窗口

        # 下移到底部
        for _ in range(1):
            pyautogui.scroll(-1000)
        rand_sleep()


        # 确认,回到最初的界面
        pyautogui.click(1027,857)
        time.sleep(5)    # 保存时间长一点

# 自动最大化VSCode
win.maximize()
print("VSCode已自动最大化,程序结束")

最后一个小2班

python 复制代码
'''
园园通小班孩子分班后补全信息
1.外省户口孩子更新地址(只更新地址,把待更新改掉)
3.Python模拟鼠标点击园园通按钮,进行分班
4.前期已经3101搜索过了。
'''


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 = r"C:\Users\mhjg2\Desktop\20260805园园通小班分班\20260805班级信息表.xlsx"
# file_path = r"C:\Users\mhjg2\Desktop\20260805园园通小班分班\20260806小1班圆圆通信息补全(1).xlsx"
# file_path = r"C:\Users\mhjg2\Desktop\20260805园园通小班分班\20260806小3班圆圆通信息补全.xlsx"
# file_path = r"C:\Users\mhjg2\Desktop\20260805园园通小班分班\小4学生信息收集表_群收集.xlsx"
file_path = r"C:\Users\mhjg2\Desktop\20260805园园通小班分班\20260806小2班圆圆通信息补全模版.xlsx"

wb = openpyxl.load_workbook(file_path)


# 读取表格
for sheet_name in wb.sheetnames:
    ws = wb[sheet_name]
    for row in ws.iter_rows(min_row=11, values_only=True):        # 从第二行开始读取姓名
    # for row in ws.iter_rows(min_row=21, values_only=True):    # 如果出问题,断了,从第X行读取孩子姓名
        if len(row) < 4:
            continue
        name = row[0][2:]
        # name = row[4]        # 小四班姓名在第五列
        if not name or str(name).strip() == "":
            continue  
        address = row[4] 
        # address = row[10]    # 小四班户籍详细地址在第11列  
        # address = row[11]    # 小五班户籍详细地址在第12列  
        # class_name = row[1]
        # garden_name = row[1]
        # data_list.append([class_name, name])
        print(name)
        print(address)


         # 点击姓名栏,
        pyautogui.click(861,376)
        # 1. 复制指定文字到剪贴板
        # print('写入姓名:',name)
        pyperclip.copy(name)
        # 2. 模拟Ctrl+V粘贴
        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(address)
        # 2. 模拟Ctrl+V粘贴
        pyautogui.hotkey("ctrl", "v")
        rand_sleep()  # 延迟2秒切换窗口

        # 下移到底部
        for _ in range(1):
            pyautogui.scroll(-1000)
        rand_sleep()


        # 确认,回到最初的界面
        pyautogui.click(1027,857)
        time.sleep(5)    # 保存时间长一点

# 自动最大化VSCode
win.maximize()
print("VSCode已自动最大化,程序结束")

同样取0列和4列,但是0列的姓名前面有两位数字学号,切片从索引2开始提取纯姓名。

三、修改后验证

现在5个小班的带填写户籍地址都修改了

我把园园通数据都导出来,看看有没有没有填写的。

r

后继问题:

1、补全户籍地址、居住地址中的省市区(大部分地址有只有路弄号)

2、修改小班外省户籍地址的(省、市、区)的正确地址(之前默认选第一个)

3、补全少数民族(实在很少,所以就把5个EXCEL打开,看看那几个是少数民族,手动复制名字单独修改保存)

小班只有两位少数民族

相关推荐
xiaoye-duck9 分钟前
《C++ 项目:手写大模型接入 SDK》DeepSeek接口设计(上):初始化和全量响应
开发语言·网络·c++·语言模型
fpcc14 分钟前
跟我学c++中级篇—streambuf在glog中的应用分析
开发语言·c++
吾与谁归in16 分钟前
C#脚本工具,支持智能提示自动补全(WPF + Roslyn + AvalonEdit)
开发语言·c#·wpf
超级架构师18 分钟前
让 Fortran 模型自己调用 Agent:原生 Fortran 2008 实现深度剖析
人工智能·python·架构·机器人·开源·fortran
小蒜学长22 分钟前
基于Django+Vue喵汪联盟宠物领养系统的设计与实现(代码+数据库+LW)
后端·python·django·宠物领养系统·流程规范化
昂好的day27 分钟前
WPF 从零入门(上):WPF 是什么、XAML 语法、布局与样式全解
开发语言·c#·wpf
飞浪纪元[FWC–FE]30 分钟前
Qt 构建排错实录:从 MSB 1009 到生成器选型
开发语言·数据库·qt
fly-iot31 分钟前
【FDE知识库】(1):AI 编程时代开发语言选型分析,云使用go,企业用java,算法python,底层c
开发语言·人工智能·golang
云边有个稻草人31 分钟前
Prometheus Pushgateway教程:离线任务指标上报、Shell与Python示例、远程访问
开发语言·python·prometheus
暴走约伯34 分钟前
【VFX工具链源码拆解 01】总体架构:大型项目特效流程的程序化落地
开发语言·经验分享·3d·unity·架构·游戏引擎