Google Docs API を使用すると、ドキュメント内のどのタブからでもコンテンツにアクセスできます。
タブとは
Google ドキュメントには、「タブ」と呼ばれる組織レイヤがあります。 ドキュメントでは、ユーザーは単一のタブ内に 1 つ以上のタブを作成できます。 現在のスプレッドシートのタブとほぼ同じです。各タブには title と ID(URL に追加されます)。タブには子タブを設定することもできます。子タブとは、別のタブの下にネストされたタブです。
子タブの API サポートは現在利用できますが、UI サポートは近日中に提供される予定です。 子タブは現在コードで処理できるため、UI サポートがリリースされたときにコードをさらに更新する必要はありません。
ドキュメント リソースでのドキュメント コンテンツの表現方法の構造的な変更
以前のドキュメントにはタブの概念がなかったため、
Document
直接含まれているリソース
すべてのテキスト コンテンツを次のフィールドに入力します。
document.body
document.headers
document.footers
document.footnotes
document.documentStyle
document.suggestedDocumentStyleChanges
document.namedStyles
document.suggestedNamedStylesChanges
document.lists
document.namedRanges
document.inlineObjects
document.positionedObjects
タブの構造的階層が追加されたため、これらのフィールドは
ドキュメント内のすべてのタブのテキスト コンテンツを意味的に表現します。「
テキストベースのコンテンツが別のレイヤで表現されるようになりました。タブのプロパティと
Google ドキュメント内のコンテンツに、
document.tabs
:
Tab
個のオブジェクト(それぞれが
には前述のテキスト コンテンツ フィールドがすべて含まれます。以降のセクションでは
簡単な概要
タブの JSON 表現
より詳細な情報が表示されます
タブのプロパティにアクセスする
タブのプロパティにアクセスするには
tab.tabProperties
これには、タブの ID、タイトル、位置などの情報が含まれます。
タブ内のテキスト コンテンツにアクセスする
タブ内の実際のドキュメント コンテンツは、
tab.documentTab
。次のすべて
上記のテキスト コンテンツ フィールドには、tab.documentTab
を使用してアクセスできます。
たとえば、document.body
ではなく、次のコマンドを使用します。
document.tabs[indexOfTab].documentTab.body
。
タブの階層
子タブは、API では Tab
の tab.childTabs
フィールドとして表されます。ドキュメント内のすべてのタブにアクセスするには、子タブの「ツリー」を走査する必要があります。たとえば、
次のようなタブ階層を含むドキュメントです。
Body
を取得するには
タブ 3.1.2 からコピーする場合、
document.tabs[2].childTabs[0].childTabs[1].documentTab.body
。サンプルを見る
後のセクションで説明します。ここには、反復処理を行うサンプルコードが
ドキュメントのすべてのタブに対して
同じ操作を行えます
メソッドの変更
タブの導入により、各ドキュメント メソッドにいくつかの変更が加えられました コードの更新が必要になる場合があります
documents.get
デフォルトでは、すべてのタブの内容が返されるわけではありません。デベロッパーは
すべてのタブにアクセスできます。「
documents.get
メソッドは
includeTabsContent
パラメータで、送信元または宛先のコンテンツを
すべてのタブがレスポンスに含まれます。
includeTabsContent
がtrue
に設定されている場合、documents.get
メソッドが返すDocument
リソースにdocument.tabs
フィールドに値が入力されています。すべてのテキスト フィールドがdocument
に直接追加されている (例:document.body
)は空のままになります。includeTabsContent
が指定されていない場合、Document
リソースのテキスト フィールド(例:document.body
)には、最初のタブのコンテンツのみが入力されます。document.tabs
フィールドは空になり、他のタブのコンテンツは返されません。
documents.create
documents.create
メソッド
Document
リソースを返します。
作成された空のドキュメントを表します。返される
Document
リソースは
ドキュメントのテキスト コンテンツ フィールドと空のドキュメント コンテンツの両方に
document.tabs
。
document.batchUpdate
各 Request
には、更新を適用するタブを指定する方法が含まれています。デフォルトでは
場合、
Request
は、
ドキュメントの最初のタブに適用されます。
ReplaceAllTextRequest
DeleteNamedRangeRequest
,
および
ReplaceNamedRangeContentRequest
3 つの特別なリクエストで、デフォルトですべてのタブに適用されます。
詳しくは、
Request
秒
ドキュメントをご覧ください
内部リンクの変更
ドキュメント内のタブ、ブックマーク、見出しへの内部リンクを作成できます。
タブ機能の導入により、link.bookmarkId
と
次のフィールドの link.headingId
フィールド:
Link
リソースは削除できなくなりました
ドキュメントの特定のタブにあるブックマークや見出しを表します。
デベロッパーは、link.bookmark
を使用するようにコードを更新する必要があります。
読み取り / 書き込みオペレーションでの link.heading
。内部リンクを公開するために
BookmarkLink
、
HeadingLink
個のオブジェクト(
ブックマークまたは見出しの ID と配置されているタブの ID を含む
できます。また、link.tabId
はタブへの内部リンクを公開します。
documents.get
のコンテンツをリンクする
レスポンスは、includeTabsContent
パラメータによっても異なります。
includeTabsContent
をtrue
に設定すると、すべての内部リンクが公開されます (link.bookmark
、link.heading
など)。以前のフィールドは使用されなくなります。includeTabsContent
が指定されていない場合、単一のタブを含むドキュメントでは、その単一のタブ内のブックマークまたは見出しへの内部リンクは引き続きlink.bookmarkId
とlink.headingId
として公開されます。ドキュメント内 複数のタブを含む場合、内部リンクはlink.bookmark
として公開されます。link.heading
。
document.batchUpdate
内、
以前のフィールド、ブックマーク、または
見出しは、
Request
。どのタブも
ドキュメント内の最初のタブのものとみなされます。
「 Link JSON 表現では、 より詳細な情報が表示されます
タブの一般的な使用パターン
次のコードサンプルでは、タブを操作するさまざまな方法を示しています。
ドキュメント内のすべてのタブのタブ コンテンツを読み上げる
タブ機能の前にこの操作を行っていた既存のコードを、サポートに移行できる
includeTabsContent
パラメータを true
に設定してタブを開き、
タブツリー階層を作成し、ビューからゲッター メソッドを呼び出す
Tab
、
DocumentTab
:
Document
を選択します。次の部分的
コードサンプルは
ドキュメントからテキストを抽出する。ドキュメント内のすべてのタブのテキスト コンテンツをすべて印刷する方法を示しています。このタブ
トラバーサル コードは、インフラストラクチャの維持や管理を気にしない他の多くの
タブの実際の構造を確認できます。
Java
/** Prints all text contents from all tabs in the document. */ static void printAllText(Docs service, String documentId) throws IOException { // Fetch the document with all of the tabs populated, including any nested // child tabs. Document doc = service.documents().get(documentId).setIncludeTabsContent(true).execute(); List<Tab> allTabs = getAllTabs(doc); // Print the content from each tab in the document. for (Tab tab: allTabs) { // Get the DocumentTab from the generic Tab. DocumentTab documentTab = tab.getDocumentTab(); System.out.println( readStructuralElements(documentTab.getBody().getContent())); } } /** * Returns a flat list of all tabs in the document in the order they would * appear in the UI (top-down ordering). Includes all child tabs. */ private List<Tab> getAllTabs(Document doc) { List<Tab> allTabs = new ArrayList<>(); // Iterate over all tabs and recursively add any child tabs to generate a // flat list of Tabs. for (Tab tab: doc.getTabs()) { addCurrentAndChildTabs(tab, allTabs); } return allTabs; } /** * Adds the provided tab to the list of all tabs, and recurses through and * adds all child tabs. */ private void addCurrentAndChildTabs(Tab tab, List<Tab> allTabs) { allTabs.add(tab); for (Tab tab: tab.getChildTabs()) { addCurrentAndChildTabs(tab, allTabs); } } /** * Recurses through a list of Structural Elements to read a document's text * where text may be in nested elements. * * <p>For a code sample, see * <a href="https://developers.google.com/docs/api/samples/extract-text">Extract * the text from a document</a>. */ private static String readStructuralElements(List<StructuralElement> elements) { ... }
ドキュメントの最初のタブからタブの内容を読み上げる
これは、すべてのタブを読み取る場合と同様です。
Java
/** Prints all text contents from the first tab in the document. */ static void printAllText(Docs service, String documentId) throws IOException { // Fetch the document with all of the tabs populated, including any nested // child tabs. Document doc = service.documents().get(documentId).setIncludeTabsContent(true).execute(); List<Tab> allTabs = getAllTabs(doc); // Print the content from the first tab in the document. Tab firstTab = allTabs.get(0); // Get the DocumentTab from the generic Tab. DocumentTab documentTab = firstTab.getDocumentTab(); System.out.println( readStructuralElements(documentTab.getBody().getContent())); }
最初のタブの更新をリクエストする
次のコードサンプルの一部は、Google Chat で特定のタブをターゲットにする方法を示しています。
Request
。このコード
サンプルに基づいていますが
テキストの挿入、削除、移動のガイド。
Java
/** Inserts text into the first tab of the document. */ static void insertTextInFirstTab(Docs service, String documentId) throws IOException { // Get the first tab's ID. Document doc = service.documents().get(documentId).setIncludeTabsContent(true).execute(); Tab firstTab = doc.getTabs().get(0); String tabId = firstTab.getTabProperties().getTabId(); List<Request>requests = new ArrayList<>(); requests.add(new Request().setInsertText( new InsertTextRequest().setText(text).setLocation(new Location() // Set the tab ID. .setTabId(tabId) .setIndex(25)))); BatchUpdateDocumentRequest body = new BatchUpdateDocumentRequest().setRequests(requests); BatchUpdateDocumentResponse response = docsService.documents().batchUpdate(DOCUMENT_ID, body).execute(); }