l 问题
请给出未来指定的某年(如2020)的全年日历。使用字符串输出,仿照常见日历的格式,按年月分隔,包含日期和星期信息。
l 思路
大致思路:循环十二个月,首先计算月标题和星期标题添加到万年历,然后循环月中的所有天,按周拼接日期,日期间隔为\t,一周拼接结束把结果追加到万年历,然后继续下一周。
1. 定义年份、结果万年历序列,计算1月1日位于星期几
2. 循环十二个月,设置每个月的标头栏
3. 循环当前月的天数,按周拼接字符串
4. 一周拼接结束把结果追加到万年历,然后继续下一周
5. 一个月循环结束,把该月最后不满一周的字符串追加到万年历
l 代码
|
A |
B |
C |
D |
|
1 |
1984 |
=[string(A1)+ "年"] |
|
|
存放结果万年历 |
2 |
=day@w(date(A1,1,1)) |
|
|
|
存储循环过程中的当前日位于一个星期的第几天,初始为1月1日 |
3 |
for 12 |
>B1=B1|["\n","\t\t\t"+string(date(A1,A3,1),"MMMM"),"日\t一\t二\t三\t四\t五\t六"] |
|
|
循环月份,设置每个月的标头栏 |
4 |
|
=fill("\t",A2-1) |
|
|
存放循环过程中当前周字符串,每月第一周要拼上第一天的缩进 |
5 |
|
for days(date(A1,A3,1)) |
|
|
循环当前月的所有天,按周将日拼接到当前周字符串B4中 |
6 |
|
|
>A2=A2+1 |
|
|
7 |
|
|
>B4=B4+string(B5) |
|
|
8 |
|
|
if A2==8 |
>A2=1 |
一周循环完则回到周一 |
9 |
|
|
|
>B1=B1|B4 |
将循环完的周字符串添加到万年历 |
10 |
|
|
|
>B4="" |
|
11 |
|
|
else |
>B4=B4+"\t" |
否则拼接\t作为日间分隔符 |
12 |
|
if B4!="" |
>B1=B1|B4 |
|
每月的最后一周可能不满7天,也要拼接到万年历 |
l 结果