【办公类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打开,看看那几个是少数民族,手动复制名字单独修改保存)

小班只有两位少数民族

相关推荐
神仙别闹2 小时前
基于 C++ 实现(控制台)学生成绩管理系统
开发语言·c++
Y幽谷客2 小时前
Python加载本地大模型(Qwen3.5 8B)
python·大模型
伞伞悦读2 小时前
【第36期】Python 目录与路径详解:pathlib、文件遍历、创建、复制、移动和删除风险
开发语言·python
线上放牧人2 小时前
Windows删除图标缓存
windows·python·pyqt
qq_5470261793 小时前
Python 变量和简单数据类型
python
智搜广告4 小时前
智搜广告:科技行业AI回答优化公司如何破局
大数据·python·elasticsearch·geo
IpdataCloud5 小时前
AI智能体调用工具怎么核验来源IP?归属地、网络类型与代理风险识别(含Python代码)
数据库·python·tcp/ip
2601_966949655 小时前
只拿到股票代码还不够:量化程序到底还需要哪些标的信息?——从数据建模开始理解股票元数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
蒸鱼Yuzheng5 小时前
Python 游戏测试开发怎么准备:日志解析、接口校验、并发与可维护性
自动化测试·python·测试开发·面试题·游戏测试
m0_734571765 小时前
深入理解5g <十八>传输块tbsize的计算
开发语言·5g