テキストを挿入、削除、移動する

Google Docs API を使用すると、ドキュメントにテキストを挿入したり、テキストを削除したりできます。テキストを移動すると両方の操作が行われ、その前にコンテンツの get が付加されます。

ドキュメントの任意のセグメント(本文、ヘッダー、フッター、脚注)にテキストを挿入したり、削除したりできます。

テキストを挿入

ドキュメントにテキストを挿入するには、documents.batchUpdate メソッドを使用し、テキストと場所をペイロードとして InsertTextRequest を含めます。

次のコードサンプルは、ドキュメント本文の指定されたインデックス位置に一連のテキスト文字列を挿入する方法を示しています。この例では、3 つのターゲット オフセット(25、50、75)を使用し、各場所に 10 文字の文字列を挿入します。

Java

        List<Request> requests = new ArrayList<>();
        requests.add(new Request().setInsertText(new InsertTextRequest()
                .setText(text1)
                .setLocation(new Location().setIndex(25))));

        requests.add(new Request().setInsertText(new InsertTextRequest()
                .setText(text2)
                .setLocation(new Location().setIndex(50))));

        requests.add(new Request().setInsertText(new InsertTextRequest()
                .setText(text3)
                .setLocation(new Location().setIndex(75))));

        BatchUpdateDocumentRequest body = new BatchUpdateDocumentRequest().setRequests(requests);
        BatchUpdateDocumentResponse response = docsService.documents()
                .batchUpdate(DOCUMENT_ID, body).execute();

PHP

$requests = array();
$requests[] = new Google_Service_Docs_Request(array(
    'insertText' => array(
        'text' => $text1,
        'location' => array(
            'index' => 25,
        ),
    ),
    'insertText' => array(
        'text' => $text2,
        'location' => array(
            'index' => 50,
        ),
    ),
    'insertText' => array(
        'text' => $text3,
        'location' => array(
            'index' => 75,
        ),
    ),
));

$batchUpdateRequest = new Google_Service_Docs_BatchUpdateDocumentRequest(array(
    'requests' => $requests
));

$response = $service->documents->batchUpdate($documentId, $batchUpdateRequest);

Python

    requests = [
         {
            'insertText': {
                'location': {
                    'index': 25,
                },
                'text': text1
            }
        },
                 {
            'insertText': {
                'location': {
                    'index': 50,
                },
                'text': text2
            }
        },
                 {
            'insertText': {
                'location': {
                    'index': 75,
                },
                'text': text3
            }
        },
    ]

    result = service.documents().batchUpdate(
        documentId=DOCUMENT_ID, body={'requests': requests}).execute()

挿入ごとに、それより番号の大きいすべてのインデックスが、挿入されたテキストのサイズでインクリメントされます。この例では、後続の挿入が修正された新しいオフセットで行われるように、これらのインデックスの変更の結果を事前に計算します。したがって、元のターゲット オフセット 25、50、75 に挿入する実際の挿入インデックスは次のようになります。

  • 最初の挿入では、オフセット 25 に 10 文字が追加されます。
  • 2 回目の挿入では、オフセット 50+10=60 で 10 文字を追加します。
  • 3 番目の挿入では、オフセット 75+10+10=95 で 10 文字が追加されます。

テキストを削除する

ドキュメントからテキストを削除するには、まず、削除するテキストの範囲を定義する Range を作成します。次に、documents.batchUpdate メソッドを使用して、DeleteContentRangeRequest を含めます。

次のコードサンプルは、ドキュメント本文のインデックス 10 からインデックス 24 までのテキストを削除する方法を示しています。

Java

        List<Request> requests = new ArrayList<>();
        requests.add(new Request().setDeleteContentRange(
                new DeleteContentRangeRequest()
                        .setRange(new Range()
                                .setStartIndex(10)
                                .setEndIndex(24))
            ));

        BatchUpdateDocumentRequest body = new BatchUpdateDocumentRequest().setRequests(requests);
        BatchUpdateDocumentResponse response = docsService.documents()
                .batchUpdate(DOCUMENT_ID, body).execute();

PHP

$requests = array();
$requests[] = new Google_Service_Docs_Request(array(
    'deleteContentRange' => array(
        'range' => array(
            'startIndex' => 10,
            'endIndex' => 24
        ),
    ),
));

$batchUpdateRequest = new Google_Service_Docs_BatchUpdateDocumentRequest(array(
    'requests' => $requests
));

$response = $service->documents->batchUpdate($documentId, $batchUpdateRequest);

Python

    requests = [
        {
            'deleteContentRange': {
                'range': {
                    'startIndex': 10,
                    'endIndex': 24,
                }

            }

        },
    ]
    result = service.documents().batchUpdate(
        documentId=DOCUMENT_ID, body={'requests': requests}).execute()

逆方向で書くことで問題を簡素化する。挿入と同様に、テキストを削除すると、セグメント内の「以下」のすべてのテキストのインデックスが変更されます。ここでも、逆方向に書き込むことでインデックスの処理を簡素化できます。

テキストを移動

テキストを移動するには、1 つの場所で削除してから別の場所に挿入します。コンテンツを削除しても、そのコンテンツはコピーされません(クリップボードに相当する概念はありません)。そのため、テキスト挿入リクエストで使用できるように、まず範囲の内容を抽出する必要があります。