
背景需求
搭档提出给小班孩子过生日,感受学校温馨

她圈出了9月过生日的四位孩子。
我想在手机上做个备忘录提示,到了生日时组织集体唱生日歌。
设计过程
点名单按照先男后女,先大后小,所以男女生日分开的。我重新按年龄大小(不考虑那男女)排了一下。
发现男孩子是老大,女孩是老么。10牛14虎

我把生日用Deepseek计算了三年的日期和星期







'''
小2班幼儿生日,制作小班2025-2026,中班2026-2027,大班2027-2028的日趋,遇到双休日,前移
Deepseek,阿夏
20250913
'''
import openpyxl
from datetime import datetime, timedelta
def get_weekday_name(date_obj):
"""获取中文星期几"""
weekdays = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"]
return weekdays[date_obj.weekday()]
def get_previous_friday(date_obj):
"""获取前一个星期五的日期"""
# 计算距离上一个星期五的天数
days_to_subtract = (date_obj.weekday() - 4) % 7
if days_to_subtract == 0:
days_to_subtract = 7 # 如果是星期五,取上一个星期五
previous_friday = date_obj - timedelta(days=days_to_subtract)
return previous_friday
def format_date_with_weekday(date_obj):
"""格式化日期为年月日星期几的样式"""
weekday_name = get_weekday_name(date_obj)
return f"{date_obj.year}年{date_obj.month}月{date_obj.day}日{weekday_name}"
def process_excel_file():
# 读取Excel文件
path = r'C:\Users\jg2yXRZ\OneDrive\桌面\20250902小2班家长沟通'
workbook = openpyxl.load_workbook(path + r'\20250902小2班幼儿生日提示.xlsx')
sheet = workbook.worksheets[0] # 获取第一个工作表
# 设置列标题
sheet['G1'] = "出生日期年月日星期"
sheet['H1'] = "小班生日"
sheet['I1'] = "小班生日前移"
sheet['J1'] = "中班生日"
sheet['K1'] = "中班生日前移"
sheet['L1'] = "大班生日"
sheet['M1'] = "大班生日前移"
# 设置列宽为25
for col in ['G', 'H', 'I', 'J', 'K', 'L', 'M']:
sheet.column_dimensions[col].width = 25
# 处理F列的数据
for row in range(2, sheet.max_row + 1): # 从第2行开始(假设第1行是标题)
f_cell = sheet[f'F{row}']
# 检查单元格是否有值
if f_cell.value is None:
continue
# 处理日期值(可能是字符串或datetime对象)
if isinstance(f_cell.value, str):
# 如果是字符串格式的日期
try:
date_obj = datetime.strptime(f_cell.value, '%Y/%m/%d')
except ValueError:
print(f"第{row}行F列的日期格式无法解析: {f_cell.value}")
continue
elif isinstance(f_cell.value, datetime):
# 如果已经是datetime对象
date_obj = f_cell.value
else:
print(f"第{row}行F列的数据类型无法处理: {type(f_cell.value)}")
continue
# 格式化原始日期并写入G列
formatted_date = format_date_with_weekday(date_obj)
sheet[f'G{row}'] = formatted_date
# 计算小班生日(原始日期+4年)
xiaoban_date = date_obj.replace(year=date_obj.year + 4)
xiaoban_formatted = format_date_with_weekday(xiaoban_date)
sheet[f'H{row}'] = xiaoban_formatted
# 如果是星期六或星期日,写入前一个星期五的日期到I列
if xiaoban_date.weekday() in [5, 6]: # 5=星期六, 6=星期日
previous_friday = get_previous_friday(xiaoban_date)
friday_formatted = format_date_with_weekday(previous_friday)
sheet[f'I{row}'] = friday_formatted
# 计算中班生日(原始日期+5年)
zhongban_date = date_obj.replace(year=date_obj.year + 5)
zh