Googleカレンダーで日記を書き溜めています。
毎日無為に過ごさないように記録をつける、感情を書き出して夜に残さないようにする、進捗状況を確認する、過去の悩みを見られるようにする
前に進んでいる感覚やメンタル改善に役立つ色々な効果があり、お勧めであります。
しかし、紙で日記を書いていた時と比べて、あえて過去の日付に遡って一日ずつ開いて読んでみるということは減ったなと感じていました。
そこで、Googleカレンダーのタイトル「日記」の予定を抽出して、テキストデータをWordに張り付けて印刷し、振り返りやすくすることを試してみました。
使用したプログラミングは、Googleが無料提供しているスプレッドシートのGoogle Apps Script(GAS)と、Excel VBAです。
ExcelのバージョンはOffice 365 32bitです。
こんな感じでタイトル:日記の説明欄に日記記事を書くという体裁にしているので、どういう形式になっているか、まずはソースを見てみました。
・・・
1800行目くらいから日記らしき記載
これを直接抽出するのは無理だなと思って、調べていたところGoogle Apps Scriptがカレンダーの操作・抽出には一番向いたプログラムだと思いました。
Javascriptと構文が殆ど同じなので、扱いやすいです。
とはいえ、ゼロから勉強しなければならない初心者ですから、ここから葛藤。
実装までにはいつも隣にITのお仕事を参考にさせて頂きました。
// 指定月のカレンダーから日時・イベント・説明を取得する
function myFunction() {
// Googleアカウントに紐付けされたカレンダー、スプレッドシートを取得
var calendar = CalendarApp.getCalendarById('~~~@gmail.com');
var sheet = SpreadsheetApp.getActiveSheet();
var no = sheet.getDataRange().getLastRow();
var date = '2020/03/01 00:00:00'; // 取得し始める日時を指定
var startDate = new Date(date);
var endDate = new Date(date);
endDate.setMonth(endDate.getMonth() + 1); // 取得し終える日時を指定
var evt = calendar.getEvents(startDate, endDate);
// イベントを取得
for (var i=0; i<evt.length; i++){
sheet.appendRow(
[
no, // 1列目 No.
evt[i].getTitle(), // 2列目 タイトル
evt[i].getStartTime(), // 3列目 日付と時間
evt[i].getDescription(), // 4列目 説明
]
);
no++;
}
}
これで下のようなスプレッドシートが得られました。
日記というイベント名で共通であれば、正規表現を使って検索することも可能と思われますが、横着して「にっき」だったり、「nikki」だったりすることもあり、一旦全部取得してから、フィルター機能を使って日記を絞ることにしました。
だいぶすっきりして、欲しい情報になってきました。
ここから改行を入れつつテキストファイルへ出力するのはExcel VBAの出番。
KIYOTATSUブログを参考にさせて頂きました。
Sub diarytoText()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets(1)
Dim fileName As String 'ファイル
'1 出力するファイルの場所
fileName = ActiveWorkbook.Path & "\diary.txt"
'fileName = "...\diary.txt"
'2 対象のファイルを開く
Open fileName For Append As #1
Dim i As Long
Dim lastRow As Long
i = 1
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To lastRow
'3 セルの値をファイルに出力する
Print #1, vbCrLf & Cells(i, 2).Value '日付
Print #1, Cells(i, 3).Value '日記
Next i
'4 対象のファイルを閉じる
Close #1
MsgBox "完了しました"
End Sub
開発タブを有効にしてマクロを使えるようにしたり、VBAのコードを書くまでの所は割愛させて頂きます。
マクロを実行すると、txtファイルに日毎改行しつつ出力することが出来ました。
もっとレベルが高ければ単独のプログラムで体裁を整えたり、定期的に出力されるように設定したりすることも出来そうですが、初心者なので工程が増えて煩雑になった感じもします。
誰かの参考になれば幸いです。