GASでGoogleドキュメントにコメントを自動で挿入する方法
この前、上司からGASでGoogleドキュメントにコメントを自動で入れられるようにしてほしいって言われたんです。でも、GASは初めてでどうやればいいか全然わからなくて…

猫男

catman
catmanが手伝ってやろう。GASを使ってGoogleドキュメントにコメントを自動化する方法を一緒に探っていこうか。
GASを使ったドキュメントコメントの基本
GASを利用すると、プログラムからGoogleドキュメントにコメントを追加することができる。これにより、ドキュメントのレビューやフィードバックを効率的に行えるようになる。
GASでドキュメントを開く方法
まず、Googleドキュメントを操作するために、そのドキュメントを開く必要がある。
function openDocument(docId) {
const doc = DocumentApp.openById(docId);
Logger.log('Document opened: ' + doc.getName());
}
ドキュメントのID(docId)は、URLの一部で確認できる。DocumentApp.openById()を使って、指定したIDのドキュメントを開く。
GASでコメントを追加する
続いて、開いたドキュメントにコメントを追加しよう。
function addComment(docId, commentText) {
const doc = DocumentApp.openById(docId);
const body = doc.getBody();
const range = body.findText('特定のテキスト');
if (range) {
const start = range.getStartOffset();
const end = range.getEndOffsetInclusive();
const comment = doc.newPosition(body, start)
.asCommentContainer()
.addComment(commentText);
Logger.log('Comment added: ' + commentText);
} else {
Logger.log('Text not found');
}
}
このスクリプトでは、findText()を使って、特定のテキストを検索し、その位置にコメントを追加している。コメントはaddComment()メソッドで追加可能だ。
なるほど、こうやってGASを使ってコメントを入れるんですね!もっといろいろ知りたいです!

猫男
高度なGASドキュメント操作
ドキュメントへのコメント以外にも、GASを使って様々な操作が可能だ。
段落全体にコメントを入れる
特定の段落全体にコメントを入れることも可能である。
function addCommentToParagraph(docId, commentText) {
const doc = DocumentApp.openById(docId);
const paragraphs = doc.getBody().getParagraphs();
const paragraph = paragraphs[0]; // 最初の段落を選択
const comment = doc.newPosition(paragraph, 0)
.asCommentContainer()
.addComment(commentText);
Logger.log('Comment added to paragraph: ' + commentText);
}
このスクリプトでは、ドキュメント内の最初の段落にコメントが追加される。getParagraphs()メソッドを利用して、段落の配列を取得し、その中の特定の段落に対して操作を行う。
助かりました!ありがとう、catman

猫男

catman
おめでとう。時間の短縮やヒューマンエラーの軽減が期待できるな。
練習問題
1. 特定のキーワードが含まれるすべての箇所にコメントを追加するスクリプトを作成してみよう。
2. ドキュメント内の最後の段落に「レビュー済み」というコメントを入れるスクリプトを書いてみよう。
解答と解説
function addCommentsToAllOccurrences(docId, keyword, commentText) {
const doc = DocumentApp.openById(docId);
const body = doc.getBody();
let foundRange = body.findText(keyword);
while (foundRange) {
const start = foundRange.getStartOffset();
doc.newPosition(body, start)
.asCommentContainer()
.addComment(commentText);
foundRange = body.findText(keyword, foundRange.getEndOffsetInclusive());
}
Logger.log('Comments added for all occurrences.');
}
このスクリプトでは、ドキュメント全体を検索し、特定のキーワードが見つかるたびにコメントを追加している。また、whileループを用いてすべての一致箇所を巡回する。
function addCommentToLastParagraph(docId) {
const doc = DocumentApp.openById(docId);
const paragraphs = doc.getBody().getParagraphs();
const lastParagraph = paragraphs[paragraphs.length - 1];
const comment = doc.newPosition(lastParagraph, 0)
.asCommentContainer()
.addComment('レビュー済み');
Logger.log('Comment added to the last paragraph.');
}
こちらのスクリプトでは、getParagraphs()で段落の配列を取得し、lengthプロパティを利用して最後の段落にコメントを追加している。