KLWPで指定したカレンダーの予定のみを表示する方法

|

KLWPはGoogleカレンダーの予定を取得して表示することができます。Googleカレンダーは1つのアカウントで複数のカレンダーを作って予定を種類分けできますが、KLWPでそのうちの1つの予定のみを表示することができないか?と以前質問をいただきました。

一応実現できましたので、そのやり方と実際に設定したコンポーネントを公開したいと思います。

通常はすべてのカレンダーがまとめられてしまう

KLWPでは、Googleカレンダーに設定されたカレンダーの中からどれを表示するのかといった選択はできますが、その中から指定したもののみを表示することは(基本的には)できません。表示すると選択したカレンダーを統合して、その中で◯番目の予定を表示、といったふうになります。

表示カレンダーを指定するものも一応あります。それはci(action, [index], [date], [calendar])と言うもので、例えば以下のように記述します。

$ci(title, 0, a2d, プライベート)$

これは「2日後(a2d)」の「プライベート」というカレンダーの「1番目」の予定の「題名」を表示するというものです。これの最後で表示するカレンダーを指定できています。

ただし、これはカレンダーの指定だけではダメで、「何番目」「日付」というパラメーターも入力しなくてはなりません。かなりピンポイントで指定しなくてはならないので、活用できる場面は限られます。(月間カレンダー、週間カレンダーなどに予定を表示する、といったところでしょうか。)

指定したカレンダーの予定のみを表示する

まずこれが完成形です。
「日本の祝日」というカレンダーと「プライベート」というカレンダーそれぞれを4件ずつ別々で表示しています。

指定したカレンダーの件名を表示するコード

カレンダー全体の構成としては、「グループ化(並べる)」を使って日付や内容を「テキスト」で表示しています。このうち、予定の件名を表示する部分のコードは以下になります。

$tc(split, fl(0, 20, "i + 1", "if(ci(cname, i)=gv(cal2), ci(title, i)+閂)"), 閂, 1)$

いろいろ組み合わせているので複雑です…。gv(cal2)という部分はグローバル変数で、ここはカレンダー名を指定しています。別途作成しましょう。

このコードは大きく分けてif, fl, tcの3つを使っています。それぞれ解説していきます。

if

ifは「もし◯なら×、そうでなければ△」と言ったように条件にあっているかどうかで表示を変えられるものです。

今回はif(ci(cname, i)=gv(cal2), ci(title, i)+閂)として使っています。これはi番目の予定のカレンダー名がグローバル変数cal2の内容と一致するのであれば「i番目の予定のタイトル+閂」を表示する、と言うものです。一致しなければ何も表示されません。i番目というのは、このあとのflで使うので、単体で使うのであれば数字が入ります。

最後の閂という文字は、文字自体に意味はないのですが、あとでtcの時に使うので入れています。

fl

flは、指定回数だけその表示を繰り返すものです。fl(0, 5, “i + 1”, “w”)とすると、0から5まで1回につき1ずつ増やして繰り返される、つまり5回「w」という表記が繰り返され、結果「wwwww」と表示されます。

今回はfl(0, 20, “i + 1”, “if(ci(cname, i)=gv(cal2), ci(title, i)+閂)”)となっています。if部分は前項の通りで、何番目の予定という部分がiとして0から20まで繰り返されます。これにより、すべてのカレンダーの予定の内、0番目から20番目の予定で、指定したカレンダーの件名+閂が繰り返し表示されます。(件名の間に「閂」と入っていますが、これを改行に変えてしまえば、このテキスト一文で予定が1行に1つ表示されます。)

tc

tcはText Converterで、テキストを様々な形に変換するものです。今回はtc(split)を使っていますが、これは指定した文字で区切ってその◯番目のものを表示、といったものです。

前項のflまでで、指定したカレンダーに一致する予定を閂という文字を挟んで表示できたので、その「閂」をtc(split)の区切り文字として利用して、1つを抜き出して表示しています。

ifのときに「閂」の文字に特に意味はないと書きましたが、ここで区切りように使うだけなのでなんでも良かったということです。1文字である必要もありません。ただし、実際の予定タイトルで絶対に使わないような文字列にしたほうが無難です。


こうして、指定した予定の◯番目の予定タイトルを表示、というのができました。同様にして日付なども表示できます。あとは通常のカレンダーと同じようにレイアウトしてあげればOKですね。

なお、flのところで0から20としていますが、予定が多い人だとここがうまくいかないかもしれません。カレンダーAで先に18個の予定があると、カレンダーBの予定が2個までしか表示できないことになります。なのでそういう場合はここの数を増やしてあげるといいでしょう。ただ、そうすると処理も増えるので、あまりに大きい数にすると表示が遅くなる可能性もある…気がします。(未検証)

ダウンロード

今回のカレンダー表示をコンポーネントにしました。グローバル変数で2つのカレンダー名を自分で入力すれば、その予定が別々に表示されると思います。KLWPのPro版を持っている方で興味があれば、お試しください。

zooper-iconseparate agenda
制作: orefolder
価格: 無料

ダウンロード


KLWPの使い方についてはこちらのページにてまとめています。使い方に困ったときなど、こちらのページも参考にしてください。