最难的是月头月位共用一周,怎样显示。
2025年 | 星期一 | 星期二 | 星期三 | 星期四 | 星期五 | 星期六 | 星期日 |
1月第1周 | 1 | 2 | 3 | 4 | 5 | ||
1月第2周 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
1月第3周 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
1月第4周 | 20 | 21 | 22 | 23 | 24 | 25 | 26 |
1月第5周 | 27 | 28 | 29 | 30 | 31 | ||
2月第5周 | 1 | 2 | |||||
2月第6周 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
2月第7周 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
2月第8周 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
from openpyxl import load_workbook
wb=load_workbook("周历-万年历.xlsx")
ws=wb.active
for i_r in range(2,70):#清除内容
for i_c in range(1,10):
ws.cell(i_r,i_c).value=None
year =int(input("请输入年份:"))
day_count = 0
for i in range(1900, year):#甲子年,1月1号是星期一,1900年是计年开始
if (i % 4 == 0 and i % 100 != 0) or i % 400 == 0:
day_count += 366
else:
day_count += 365
if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:
a = [0,31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
year_day=366
else:
a = [0,31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
year_day=365
week_ji = int((day_count) % 7)#上码是定位去年最后一天是星期几
day_year_total=week_ji-1#补齐第一周是上年占的天数,便于后续算出当天是第几周
q=1 #总行数
ws.cell(1,1).value=str(year)+'年'
for month in range(1,13):
day_year_total+=a[month-1]
day=1
for day in range(1,a[month]+1):
m,n=divmod(day+week_ji,7)
if n==0:
n=7
m=m-1
ws.cell(1+m+q,n+1).value=day
week_count,useless=divmod((day_year_total+day),7)#这天是第几周
ws.cell(1+m+q,1).value=str(month)+'月第'+str(week_count+1)+'周'
week_ji=n
if n==7:
q=m+q
else:
q=m+q+1
wb.save("周历-万年历.xlsx")
wb.close()