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

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

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







'''
小2班幼儿生日,制作小班2025-2026,中班2026-2027,大班2027-2028的日趋,遇到双休日,前移
Deepseek,阿夏
20250913
'''import openpyxl
from datetime import datetime, timedeltadef get_weekday_name(date_obj):"""获取中文星期几"""weekdays = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"]return weekdays[date_obj.weekday()]def get_previous_friday(date_obj):"""获取前一个星期五的日期"""# 计算距离上一个星期五的天数days_to_subtract = (date_obj.weekday() - 4) % 7if days_to_subtract == 0:days_to_subtract = 7 # 如果是星期五,取上一个星期五previous_friday = date_obj - timedelta(days=days_to_subtract)return previous_fridaydef 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'] = "大班生日前移"# 设置列宽为25for 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}")continueelif isinstance(f_cell.value, datetime):# 如果已经是datetime对象date_obj = f_cell.valueelse: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