之前我寫過兩篇關於 Progress Bar 的文章,分別是〈Progress Bar 進度條〉和〈Notion 最新的進度條/環〉,繼公式的改版,也是該來整頓之前寫的公式啦~~
老樣子,以閱讀紀錄為範例。
空值
時,則顯示空值
。空值
或0
時,則顯示空的進度條
及0%
。有數字
時,要顯示對應的狀態進度條
及百分比
。1.使用let()
函數,及呈現進度對應的百分比。
lets(
進度, prop("已閱讀") / prop("總頁數"),
進度百分比, floor(進度 * 100) + "%",
ifs(
empty(prop("總頁數")), "",
進度百分比
)
)
2.進度條顯示
lets(
進度, prop("已閱讀") / prop("總頁數"),
進度條_完成, substring("▰▰▰▰▰▰▰▰▰▰", 0, floor(進度 * 10)),
進度條_完成
)
3.之後將兩部分的公式,寫在一起就完成啦!順便可以調整一下顯示的方式,看起來會更順眼。
lets(
圖標, repeat(prop("圖標_1"), 10),
進度, prop("已閱讀") / prop("總頁數"),
進度百分比, floor(進度 * 100) + "%",
進度條_完成, substring(圖標, 0, floor(進度 * 10)),
ifs(
empty(prop("總頁數")), "",
進度條_完成 + " " + 進度百分比
)
)
4.因為要展現不同的圖標效果,所以我在上面的公式中,多增加一個自定義變數。如果你有複製使用範例庫,可以在對應的圖標_X
中,輸入你喜歡的圖示,就可以看到呈現效果。特別要提醒,如果你是使用Emoji
做為進度條的圖示,記得在公式中進度條_完成
與進度條_未完
的部分要小修改,要乘以二才會正確顯示長度。
lets(
圖標, repeat(prop("圖標_1"), 10),
進度, prop("已閱讀") / prop("總頁數"),
進度百分比, floor(進度 * 100) + "%",
進度條_完成, substring(圖標, 0, floor(進度 * 10)),
ifs(
empty(prop("總頁數")), "",
進度條_完成 + " " + 進度百分比 )
)
lets(
圖標_實心, repeat(prop("圖標_2-1"), 10),
圖標_空心, repeat(prop("圖標_2-2"), 10),
進度, prop("已閱讀") / prop("總頁數"),
進度百分比, floor(進度 * 100) + "%",
進度條_完成, substring(圖標_實心, 0, floor(進度 * 10)),
進度條_未完, substring(圖標_空心, 0, 10 - floor(進度 * 10)),
ifs(
empty(prop("總頁數")), "",
進度條_完成 + 進度條_未完 + " " + 進度百分比
)
)
這種的是我最喜歡的,變化也特別的多。
我會把圖標_3
換成可愛的 Emoji,再額外計算時間進度,當任務進度小於時間進度時,可以變成小幽靈,當任務進度大於時間進度時,他可以變成人類,若很著急可能還可以把火焰放進來。
我自己有額外把任務進度分成幾個區塊,從 🥜 → 🌱 → 🍀 → 🌿 → 🌲,時間就使用 ⏰。若你自己要自己做,記得要把「-」做成 22 個,這樣呈現的效果比較好(因為兩個短線的長度大約是一個 Emoji 的長度)。
lets(
進度, prop("已閱讀") / prop("總頁數"),
進度百分比, floor(進度 * 100) + "%",
進度條_完成, substring("-----------", 0, floor(進度 * 10)),
進度條_未完, substring("-----------", 0, 10 - floor(進度 * 10)),
ifs(
empty(prop("總頁數")), "",
進度條_完成 + prop("圖標_3") + 進度條_未完 + " " + 進度百分比
)
)
lets(
進度, prop("已閱讀") / prop("總頁數"),
進度百分比, floor(進度 * 100) + "%",
個位數, (進度 * 10 - floor(進度 * 10)) * 10,
進度條_完成, substring("🌕🌕🌕🌕🌕🌕🌕🌕🌕🌕", 0, 2 * floor(進度 * 10)),
進度條_未完, substring("🌑🌑🌑🌑🌑🌑🌑🌑🌑🌑", 0, 2 * (10 - if(個位數 > 0, 1 + floor(進度 * 10), floor(進度 * 10)))),
個位數_月球, ifs(
個位數 == 0, "",
個位數 < 5, "🌘",
個位數 == 5, "🌗",
"🌖"
),
ifs(
empty(prop("總頁數")), "",
進度條_完成 + 個位數_月球 + 進度條_未完 + " "
)
)
如果是兩層的顯示,記得要將欄位開啟折疊功能(Wrap column)。
lets(
進度, prop("已閱讀") / prop("總頁數"),
進度百分比, floor(進度 * 100) + "%",
進度條_完成, substring("▔▔▔▔▔▔▔▔▔▔", 0, floor(進度 * 10)),
進度條_未完, substring("-----------", 0, 10 - floor(進度 * 10)),
ifs(
empty(prop("總頁數")), "",
"🟥🟥🟥🟨🟨🟨🟨🟩🟩🟩 " + 進度百分比 + "\n" + 進度條_完成 + "^"
)
)
style()
lets(
進度, round((prop("已閱讀") / prop("總頁數")) *100) / 100,
進度百分比, 進度 * 100 + "%",
方塊, floor(進度 * 10),
顏色, ifs(
進度 >= 0.8, "blue",
進度 >= 0.6, "green",
進度 >= 0.4, "yellow",
進度 >= 0.2, "orange",
"red"
),
("█".repeat(方塊 * 2).padEnd(10 * 2,"")
+ 進度百分比.padStart(8," ")).style("c", 顏色, 顏色 + "_background")
)
lets()
函數的好處,在編寫上可以一層包一層,閱讀也能更容易些,尤其是不會再有那麼多的「()」了~