<aside> 💡 如何用 Notion 做一份课程表?你可以用表格视图,每一列分别是星期一、星期二、星期三……但如果涉及单双周或者需要关联,就比较麻烦了。这里介绍一种看板视图的实现方法,将课程表与课程数据库相关联,还可实现单双周。涉及了不少有趣的小技巧,相信看完一定会有收获~
</aside>
想使用这个课程表,请 duplicate 以下页面到自己的工作区,然后参照页内使用说明操作。
[Notion 课程表模板 by Niin](https://niin.notion.site/Notion-by-Niin-f389f7e743b44fe69a322707c1d01109)
想了解更多原理,请对照模板继续阅读。
以下无特殊说明均为课程表数据库中属性:
星期
:星期几如何按“一、二、三、四……”不按字典顺序排序?一般的文本属性排序时,会按字母表进行字典排序,但根据单选属性排序时,顺序由单选属性的选择面板决定,可以自己上下拖动。节数
:这里用了数字属性。为什么不把节数放在标题列,用 formula 获取数字呢?因为数据库制作过程涉及 duplicate,标题的属性会变成 "Copy of ...",遂直接标题留空。如果觉得留空不舒服,也可以 formula 得到星期几第几节,复制到标题,但其实没有必要。上课时间
:根据事先填入的 时间文本
和 节数
得到这节课对应的时间段值。用到正则,先在最前面加一个 ","
代表首项为空,然后去除前 n 项 "^(.*?,){" + format(prop("节数")) + "}"
,再去除首项后内容 ",.*$"
,这样超过范围时会为空。另外增加去除空格,增强鲁棒性。显示
:checkbox 指示条目是否需要,一方面根据时间段个数,另一方面可更改函数选择是否需要星期六和星期日。时间段个数通过 ,
个数 +1 获得,即 length(replaceAll(prop("时间文本"), "[^,]", "")) + 1
,为增加鲁棒性,考虑最后也加了逗号的情况,将 +1 修改为 + ((slice(prop("时间文本"), length(prop("时间文本")) - 1) == ",") ? 0 : 1)
。单周的课
& 双周的课
:对于一个特定时间段,单双周的情况可分为:每周相同课,只在单周或双周有课,单双周不同课。这两个 formula 区别只在于一个 单
和 双
,还有一个 $1
和 $2
。
课程
属性含有 ,
。但如果课程名称中含有英文逗号,结果就可能出错。因此我在课程数据库中增加了 课程加符号
属性,先给每个课程加上了 <>
,再正则匹配 "^<(.+?)>,<(.+?)>$"
,就不容易出问题了(注意 rollup 的结果中,逗号后无空格)。此时单双周的课程分别为 $1
和 $2
。Count not empty
。本周的课
: formatDate(now(), "w")
获取现在是今年第几周,再间隔显示单双周课表。因此需要初始设定除以 2 的余数为 0
或 1
。