
[GAS]Googleドキュメントのアジェンダを自動で差し込もう
2023/05/03 更新 - 本記事をツール化しています(ぺこり)
Googleドキュメントって便利だ。会議のアジェンダを書いて、そのまま議事録にするとか。まぁ、よくあるパターンですよね。
そういう使い方をしていると会議のある日は、午前中にGoogleドキュメントの今日分アジェンダ記入エリアを作成して、各所に「アジェンダの記入をお願いしまーす!」とかメールとかSlackとか回す。まぁ、よくあるパターンですよね。
例)会議 Googleドキュメント

ただ、会議は毎週ある。場合によっては毎日あるかも知れない。そして、残念ながら私たちは人間だ。人間は「忘れるいきもの」であり、たまに具合が悪くなったりして会社を休んだりもする。
「毎回同じようなのを追加するだけなのに!」とか「アジェンダ作り忘れたら先輩に怒られそうで怖い!」とかありますよね。
なら、そういうのは自動化しちゃいましょう。カッコよく言うと「Automation(オートメーション)」です。
これができれば「あ、それ。めんどくさいので自動化しときましたー。」とかさらりとカッコいい台詞をキメることができます!
なお、本noteは1つのGoogleドキュメントにアジェンダを都度追加する形式をご紹介しています。都度新しいGoogleドキュメントを作成してアジェンダ作成する場合は、下記平野さんのnoteをご参照ください!
本noteは、Googleドキュメントで以下のことを行うところまで記載しています。
Googleドキュメントにアジェンダを差し込むプログラムを組む
テキストを差し込むにはプログラムを使います。Googleドキュメントには”Google Apps Script(以降GAS)”と呼ばれるプログラムが動くようになっています。
GASは、Javascriptに書き方がかなり似ていますので、Javascriptを書ける方だと理解しやすいでしょう。もちろん、Javascriptがわからない方でも、できるように本noteは記載しています。
まず、アジェンダを差し込むGoogleドキュメントを開きます。開いたらすかさずメニューから「ツール>スクリプトエディタ」を開きます。

すると別ウィンドウでこんな画面が表示されます。

これがGASプログラムを書くツール(エディタ)です。赤枠の部分にプログラムを書いていきます。
今回は、下記のようなアジェンダ定型文を会議名の下に自動で差し込むプログラムを作ります。

下記コードをまるまるコピーしてエディタに貼り付けてください。なお、最初からエディタにある "function myFunction()..."は消してしまって問題ありません。
/******************************
アジェンダ定型文を差し込み
******************************/
function insertAgenda() {
var doc = DocumentApp.getActiveDocument();
// ○日後の日付を生成
var plusDays = 0;
var targetDate = new Date();
targetDate.setDate(targetDate.getDate() + plusDays);
var date_text = Utilities.formatDate(targetDate, 'Asia/Tokyo', 'MM/dd');
// ◯行目以降にアジェンダを差し込む
var insert_row = 1;
// 追加テキストを行ごとで配列化
/**************************
配列書式 => ["文字装飾","追加テキスト"],
↓使える文字装飾
TITLE => タイトル装飾
HEAD1 ~ HEAD4 => 見出し装飾
NORMAL => 文字装飾なし
BULLET => 箇条書き
HR => 区切り線
**************************/
var insertArray = [
["HEAD1", date_text],
["HEAD2", "アジェンダ"],
["HEAD3", "1.進捗状況確認"],
["BULLET", ""],
["HEAD3", "2.伝達事項"],
["BULLET", ""],
["HEAD3", "3.来週のアクション"],
["BULLET", ""],
["NORMAL", ""],
["NORMAL", ""],
];
for (i=0; i<insertArray.length; i++) {
switch (insertArray[i][0]) {
case "TITLE":
insert_paragraph = doc.insertParagraph(insert_row, insertArray[i][1]).setHeading(DocumentApp.ParagraphHeading.TITLE);
break;
case "HEAD1":
insert_paragraph = doc.insertParagraph(insert_row, insertArray[i][1]).setHeading(DocumentApp.ParagraphHeading.HEADING1);
break;
case "HEAD2":
insert_paragraph = doc.insertParagraph(insert_row, insertArray[i][1]).setHeading(DocumentApp.ParagraphHeading.HEADING2);
break;
case "HEAD3":
insert_paragraph = doc.insertParagraph(insert_row, insertArray[i][1]).setHeading(DocumentApp.ParagraphHeading.HEADING3);
break;
case "HEAD4":
insert_paragraph = doc.insertParagraph(insert_row, insertArray[i][1]).setHeading(DocumentApp.ParagraphHeading.HEADING4);
break;
case "BULLET":
insert_paragraph = doc.insertListItem(insert_row, insertArray[i][1]).setGlyphType(DocumentApp.GlyphType.BULLET);
break;
case "HR":
insert_paragraph = doc.insertParagraph(insert_row, insertArray[i][1]).insertHorizontalRule(0);
break;
default:
insert_paragraph = doc.insertParagraph(insert_row, insertArray[i][1]).setHeading(DocumentApp.ParagraphHeading.NORMAL);
break;
}
insert_row++;
}
}
これで保存をしてみましょう。保存するには、メニューバーのファイルアイコンをクリックすれば保存できます。

するとたぶんこんな表示が出ます。

「保存するには、プロジェクト名を付けてね!」ということなので、名前を付けます。何でもいいですが、パッと見て分かるプロジェクト名にしておきましょう。本noteでは、「insert Agenda」というプロジェクト名で保存します。
それでは、作ったプログラムを実行してみましょう。メニューバーにある"▶"マークをクリックしてみてください。

するとさらにこんな表示が出ます。

「プロジェクトを新しく作るには、あなたのGoogleアカウントの許可が必要だよ。」と言われます。"許可を確認"をクリックします。
するとまた違う表示が続きます。

「どのGoogleアカウントで許可しますか?」ということなので、ご自身のGoogleアカウントを選択します。
まだ続きます。

要約すると「作成するプロジェクトは、Googleドキュメントの表示と操作を行うものです。許可しますか?」という内容です。内容を確認して、"許可"をクリックしましょう。
保存して初回実行するだけで一苦労ですが、この確認は初回の時だけです。
"▶"マークをクリックすると、こんな表示が出てしばらくすると消えちゃいます。「プログラムを実行してますよー」という内容です。

さて、実行したらGoogleドキュメントを確認してみてください。

赤枠の部分が追加されてますよね?
「え?でも私たちの会議のアジェンダはこんなじゃない!」とか、「会議が朝イチだから前日にアジェンダ記入を回すから、会議の日付は翌日の日付がいいんだよなぁ。」とか「うちは会議名の下に会議ルールと10行に渡り語っているんだ。アジェンダはそのルール記述の後だ!」とかありますよね。
これらは、プログラムをちょっとカスタマイズすれば大丈夫です。
日付を翌日などにする
プログラムの中にこんな記述があると思います。
// ○日後の日付を生成
var plusDays = 0;
これは「今日の日付に何日足す?」というものです。初期値は「0」にしています。何も足さないので「今日の日付」が表示されます。これを下記のように「1」にすれば、「翌日の日付」が表示されるようになります。必ず半角で入力してください。
// ○日後の日付を生成
var plusDays = 1;
アジェンダを差し込む行を変える
アジェンダを差し込む行位置を変えるには、この部分を変更します。
// ◯行目以降にアジェンダを差し込む
var insert_row = 1;
初期値では「1」になっています。これは「会議名がある1行目の後にアジェンダを差し込む」という内容です。例えば、会議名の後に箇条書きで2行の定型文があるとします。その定型文の後にアジェンダを差し込みたい場合は、下記のように「3」にすれば大丈夫です。必ず半角で入力してください。
// ◯行目以降にアジェンダを差し込む
var insert_row = 3;
アジェンダの内容を変える
アジェンダの内容を変えるには下記部分をいじります。
var insertArray = [
["HEAD1", date_text],
["HEAD2", "アジェンダ"],
["HEAD3", "1.進捗状況確認"],
["BULLET", ""],
["HEAD3", "2.伝達事項"],
["BULLET", ""],
["HEAD3", "3.来週のアクション"],
["BULLET", ""],
["NORMAL", ""],
["NORMAL", ""],
];
少し複雑ですが、プログラムで差し込むアジェンダは、Googleドキュメントの1行1行をばらばらに作っています。
1行分の書式は下記です。太文字の部分を変えてください。ダブルコーテーションやカンマなどの記号は消したりしないようにしてください。
["文字装飾","追加テキスト"],
ちょっと分かりにくいですが、Googleドキュメントでは、見出しを付けたり、箇条書きにしたりなど、文字装飾ができます。それを少しだけできるようにするために、その行のテキストはどの装飾を使うのかを宣言します。

本プログラムで使えるのは、TITLE, HEAD1, HEAD2, HEAD3, HEAD4, BULLET, NORMAL の7つの文字装飾を使えるようにしています。
文字装飾の宣言の後にカンマで区切り、追加するテキストを入力します。
いくつか例を提示しますね。
▼大きい文字(HEAD1)でテキストは「事件は会議室で起きてるんじゃない! 現場で起きてるんだ!!」と入力する場合
["HEAD1", "事件は会議室で起きてるんじゃない! 現場で起きてるんだ!!"],
追加されたGoogleドキュメント上の表示はこんな感じ。

▼普通の文字(NORMAL)で3行入力だけど、真ん中の行は改行する場合
["NORMAL", "安西先生"],
["NORMAL", ""],
["NORMAL", "バスケがしたいです"],
追加されたGoogleドキュメント上の表示はこんな感じ。

改行したい場合は、テキストを空っぽの状態にすれば、一行空きます。
▼少し大きな文字(HEAD3)で「日付+に仕上げて欲しい」、箇条書き(BULLET)でテキスト「だが断る」と入力する場合
["HEAD3", date_text + "に仕上げて欲しい"],
["BULLET", "だが断る"],
追加されたGoogleドキュメント上の表示はこんな感じ。

日付は"date_text"という変数に格納しています。これはダブルコーテーションなしで埋め込むことができます。それにテキストをつなげるには"+"(半角プラス)を入れればつなげることができます。
うまく文字装飾とテキストを組み合わせてアジェンダ定型文を作成してみてください。動作確認は、都度保存して、"▶"マークをクリックして、差し込まれるテキスト内容や位置を確認しながら調整していくのをおすすめします。
これでGASでのアジェンダ差し込みプログラムは完成です!
…ただ、このままでは会議当日朝に、"▶"マークをクリックしないといけません。それはめんどくさいです。次は、作成したGASプログラムを自動実行する部分を作成していきます。
毎週、会議当日の朝に作成したプログラムを自動で実行する
作成したGASプログラムを自動実行するには「トリガー」という機能を使います。
トリガーを使うと「毎週月曜の午前8時に実行」など目覚まし時計のアラーム設定のようなことができます。もちろん、設定仕方によって「毎日」とか「毎月」とかも設定可能です。便利ですね!
今回は、「毎週月曜午前9時」までにトリガーでプログラムを動かすように設定してみましょう。
トリガーを設定するには、メニューの「編集>現在のプロジェクトのトリガー」をクリックします。

開くと別ウィンドウでこんな画面が開きます。

おそらくまだトリガーを作成していないので、「結果がありません」と表示されているはずです。右下にある「トリガーを追加」のボタンをクリックしてください。
クリックするとこのような画面が表示されるので、「イベントのソースを選択」の選択肢から「時間主導型」を選んでください。

「時間主導型」を選ぶと「時間ベースのトリガーのタイプを選択」という選択肢が追加されるので「週ベースのタイマー」を選んでください。

すると次は「曜日を選択」という選択肢が追加されるので「毎週月曜日」を選びます。

最後に「時刻を選択」が追加されるので「午前8時〜9時」を選びます。最後に"保存"ボタンをクリックします。

保存すると設定したトリガーが表示されます。

これでトリガーの設定は完了です。
以上ですべての設定が完了です。
問題なければ、翌週月曜日の午前9時までにトリガーが発動し、アジェンダ差し込みプログラムが動き、Googleドキュメントに自動でアジェンダ記入エリアが追加されているはずです。
その後のアジェンダ記入を促すSlackやメールの通知も自動化すれば、会議のある朝にゆとりがうまれます。ソファーでくつろいでコーヒーとか飲めちゃいます!すばらしいです!ヤバいですね!
最後に注意点です。トリガーは、削除しない限り永遠と動き続けます。そして、そのトリガーは他の人から削除が簡単にはできません。なので、もし部署異動や退職などで担当が変わるなどの場合は、トリガーの削除を忘れずに!
GASでGoogleスプレッドシートを操作する記事はネットにたくさんあるのですが、Googleドキュメントを操作する記事はあまりなく、つたないプログラムですが、参考になれば幸いです。でわでわ。
※本noteは、2020/07/16時点のGoogle Apps Scriptを利用しています。GASのバージョンアップ等により動かない場合はご了承ください。