前提として、たとえば下記のような操作を行って見出しを設定しているとします。
① Googleドキュメントで、文中の見出しにしたい各タイトル文字列をドラッグで選択して、
メニューから「表示形式」→「段落スタイル」→「見出し1」→「『見出し1』を適用」をクリック
※見出しのサイズはここでは説明のため「1」にしていますが、後述の見出しリンクが作れればどれでもよいです。
② 次に、文書の先頭にカーソルを移動し、メニューの「挿入」→「目次」→「青いリンクあり」のアイコンをクリック
③ 上記の操作により、下の図のような状態になるはずです。
これによって文書の先頭にテーブルコンテンツが挿入され、その中に見出しのリンクが入っている、という文書構造になります。
この文書構造に対して、見出しのテキストとリンクURLの一部(heading=~~以降)を抽出するコードは、下記になります。
js
1// コンテナバインドスクリプトと仮定。
2function myFunction() {
3 const doc = DocumentApp.getActiveDocument();
4
5 for (let i = 0; i < doc.getNumChildren(); i++) {
6 const p = doc.getChild(i);
7 if (p.getType() == DocumentApp.ElementType.TABLE_OF_CONTENTS) {
8 const toc = p.asTableOfContents();
9 for (let ti = 0; ti < toc.getNumChildren(); ti++) {
10 const itemToc = toc.getChild(ti).asParagraph().getChild(0).asText();
11 const itemText = itemToc.getText();
12 const itemUrl = itemToc.getLinkUrl();
13 // テキストとURLをconsoleに表示
14 console.log(itemText);
15 console.log(itemUrl);
16 }
17 break;
18 }
19 }
20}
※前提を細かく定義したのは、以下の理由です。
- リンクの作り方は複数あるため、もしかしたら質問者さんは別のやり方で作っているかもしれない、という可能性がある。
- Googleドキュメントは文書構造が複雑になれば要素を辿っていくのに手間がかかる。仮に上記①~③のような単純な構造でない場合、上記のコードがうまくいかない可能性がある。
もし上記コードがうまく行かない場合は、現状のドキュメントのスクリーンショットや、見出しの作り方について説明していただけると、解決しやすいかもしれません。
この回答にあたっては、下記リンクを参考にしました:
https://stackoverflow.com/a/12244248
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/06/27 03:00
退会済みユーザー
2022/06/27 10:24 編集
2022/06/28 04:44