0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

GASでGoogleドキュメントのアジェンダを作成

Last updated at Posted at 2021-07-04

きっかけ

私の勤務先の会社ではアジェンダにGoogleドキュメントを使用しております。
その際にGoogleドキュメントに上部に追記する形でアジェンダを残しています。
Googleドキュメントを新たに作成するのは見かけたが追記するパターンは見かけなかったので実装してみました。

目的

現状だと都度アジェンダとなるテンプレートを手動でコピーして行っているので、この手動作業をなくすことを目的としています。また、なるべく時間をかけずに実装することを目的とします。なので多少のレイアウト崩れ等は目をつぶります。

方法検討

パターン①GASにテンプレートとなる文章を埋め込む
 → テンプレートの内容が変わった際に修正が大変そう。
パターン②元となるドキュメントにテンプレートを用意しておく
 → GASでのドキュメント操作が大変そう
パターン③テンプレートを別ドキュメントに用意しておく
 → 新規ファイルを作成する方法を見かけるので容易にできそう

ということで今回は③で実装してみます

準備

テンプレートファイルの準備

内容はなんでもOK

朝会.png

アジェンダを追記するファイルを準備

アジェンダ.png

実装

テンプレートからドキュメントにコピーする

以降のコードはアジェンダを追記するドキュメントのGASに記載してください

/*
 * コピー
 */
function insertTaskAssignmentAgenda() {
  // テンプレートから内容を取得(https://docs.google.com/document/d/xxxxxxxxxxxxxxxxxxxxxxxxxxxx/edit)
  const fileId = "xxxxxxxxxxxxxxxxxxxxxxxxxxxx";
  const templateDocument = DocumentApp.openById(fileId);
  
  // 挿入する行番号
  let insertRowNumber = 1;
  let document = DocumentApp.getActiveDocument();

  // テンプレートからコピー
  templateDocument.getBody().getParagraphs().forEach(paragraph => {
    let para = paragraph.copy();
    if (insertRowNumber == 1) {
      // 日時を置換
      const title = para.getText().replace("{date}", getDate(0));
      document.insertParagraph(insertRowNumber++, title).setAttributes(para.getAttributes()).setFontSize(13).setBold(true);
    } else if (para.getType() === DocumentApp.ElementType.LIST_ITEM) {
      document.insertListItem(insertRowNumber++, para.getText()).setGlyphType(DocumentApp.GlyphType.BULLET).setAttributes(para.getAttributes());
    } else {
      document.insertParagraph(insertRowNumber++, para.getText()).setAttributes(para.getAttributes());
    }
  });
  
  // 区切り線
  document.insertHorizontalRule(insertRowNumber++);
}

/*
 * 日時
 */
function getDate(addDays = 1) {
  const now = new Date();
  now.setDate(now.getDate() + addDays);  
  return Utilities.formatDate(now, 'Asia/Tokyo', 'YYYY-MM-dd');
}

メニューに登録

アジェンダを追記するドキュメントのGASに記載する
function onOpen() {
  let ui = DocumentApp.getUi();
  let menu = ui.createMenu('アジェンダ');
  menu.addItem('朝会', 'insertMorningMeetingAgenda');
  // アジェンダの数だけメニューに登録
  menu.addItem('XXXXX', 'XXXXXXXXXXXXXXXX');
  menu.addToUi();
}

問題点

下記のように実行するとなぜか以下の現状が起こったり起こらなかったりする

  • リンクは貼られているが書式が反映されない
  • 箇条書きの書式が違う

結果.png

自動作成について

このままでもよいが必要に応じてトリガーを設定すれば全自動で作成するようにできます

まとめ

これでアジェンダを手動でコピーする手間がなくなりました

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?