はじめに
タイトルデータだけのデータベース登録については、箇条書きを使うことで一括登録をする方法を紹介しました。 hkob.hatenablog.com
ただ、うまくテーブルの形を合わせると、Excel からの貼り付けもかなり便利です。今回は、ics というカレンダー形式のタスクデータを、Excel を経由して一括登録する方法を解説します。
背景
本校の校務支援システムでは、授業のスケジュールを Google Calendar などに登録できるように ics 形式で出力してくれます。形式は以下のような形になっています。ここから、授業名を示す SUMMARY と開始日・時刻を示す DTSTART が取り出せれば Ok です。
BEGIN:VCALENDAR VERSION:2.0 PRODID:-//東京都立産業技術高等専門学校//校務支援システム//JP BEGIN:VEVENT DTSTART;TZID=Asia/Tokyo:20210409T102500 DTEND;TZID=Asia/Tokyo:20210409T174500 SUMMARY:卒業研究(53) END:VEVENT BEGIN:VEVENT DTSTART;TZID=Asia/Tokyo:20210412T124500 DTEND;TZID=Asia/Tokyo:20210412T160000 SUMMARY:電気電子工学実験実習I(23) END:VEVENT BEGIN:VEVENT DTSTART;TZID=Asia/Tokyo:20210412T102500 DTEND;TZID=Asia/Tokyo:20210412T115500 SUMMARY:情報処理II(33) END:VEVENT
このファイルを読み込み、タブ区切りテキストに変換した後、Excel に貼り付け、さらに Notion にペーストすることで一括登録します。以下、手順を説明します。
Notion 側の受け入れ準備
Notion ではタスクというデータベースに流し込みます。先ほどみたように入力するデータは、「タスク名」と「日付」だけになります。そこで、データベース置場に「時間割一括入力」というページを作成し、タスクを Linked Database で用意します。
すでに登録されたものが見えても邪魔なので、「Done」にチェックが入ったものは除いています。また、プロジェクトは「l授業」になるので、フィルタを設定しておきます。あらかじめフィルタしてある項目は、流し込んだ場合に自動的に設定されるためです。
ics から tsv への変換
Excel はタブ区切りテキスト(tsv) を貼り付けると自動的にセルに配置してくれるので、ics から tsv に変換するスクリプトを作成すればよいだけです。私は Rubist なので、Ruby で書きました。SUMMARY と DTSTART を取り出して、END の時に書き出しているだけです。一つだけ工夫した点は、同じ授業名が出ないように 2 回目以降は後ろに数字を入れています。これは、同じ文字列が存在する列は、Notion が勝手に Select に変換してしまい、余計な空白列が発生してしまうためです。
#! /usr/bin/env ruby if ARGV.length == 0 print "Usage: ics2tsv ics-file" exit else datetime = nil summary = nil summary_hash = Hash.new 0 print "タスク名\t日付\n" open(ARGV.first, "rt") do |f| while line = f.gets case line when /^BEGIN:VEVENT.*/ start = nil summary = nil when /^DTSTART.*(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})/ datetime = "#{$1}/#{$2}/#{$3} #{$4}:#{$5}" when /^SUMMARY:(.*)/ summary = $1 summary_hash[$1] += 1 when /^END:VEVENT/ num = " #{summary_hash[summary]}" print "#{summary}#{num == ' 1' ? '' : num}\t#{datetime}\n" end end end end
このスクリプトをパスの通った場所に「ics2tsv.rb」として保存します。私は ~/bin/ics2tsv.rb
として保存しました。このコマンドが実行できるように実行属性をつけておきます。
chmod +x ~/bin/ics2tsv.rb
あとは、このコマンドを実行し、ペーストボードに出力すれば終了です。
ics2tsv.rb ~/Downloads/小林 弘幸_授業スケジュール.ics | pbcopy
ターミナルでの作業はこれで終了です。
Excel への貼り付け
Excel で新規書類を作成し、先ほど変換したテキストをペーストします。2列のデータになりました。ちょうど貼り付けた領域が選択状態になっているので、「Command + C」でコピーします。
貼り付けた領域がそのままコピー中になります。
Notion に貼り付け & タスクへの移動
この状態で、Notion に切り替え、貼り付けられたデータを先ほどのテーブルの下の方にそのまま Notion に貼り付けます。
貼り付けられたデータを全部選択します。どういうやり方が一番いいのかわかりませんが、私は以下のような感じで全選択をしています。まず1行目を選択します。
「esc」キーを押して、ダイアログを消します。1行だけが選択された状態になります。
シフトキーを押しながら、カーソルを移動すると選択範囲が広がります。一番下まで選択します。選択後に一番上まで移動し、列の少し左にカーソルを合わせるとこんな画面になります。
これを上に用意したタスクの Linked Database にドラッグします。「+New」の上にドラッグするとタスクに登録されます。
後始末
空になった Untitled のテーブルは削除してください。また、移動用に使った Excel も消してしまって構いません。
おわりに
こんな感じで前期分の授業が一括でタスクに登録できてしまいました。カレンダービューで見るとこんな感じでちゃんと繰り返しの授業が登録されています。今年は授業で気になったことは、タスクページにどんどん記述して記録に残していこうと思います。