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

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).setTabId(TAB_ID))));

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

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

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,
            'tabId' => TAB_ID,
        ),
    ),
    'insertText' => array(
        'text' => $text2,
        'location' => array(
            'index' => 50,
            'tabId' => TAB_ID,
        ),
    ),
    'insertText' => array(
        'text' => $text3,
        'location' => array(
            'index' => 75,
            'tabId' => TAB_ID,
        ),
    ),
));

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

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

Python

requests = [
        {
        'insertText': {
            'location': {
                'index': 25,
                'tabId': TAB_ID
            },
            'text': text1
        }
    },
                {
        'insertText': {
            'location': {
                'index': 50,
                'tabId': TAB_ID
            },
            'text': text2
        }
    },
                {
        'insertText': {
            'location': {
                'index': 75,
                'tabId': TAB_ID
            },
            '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)
                        .setTabId(TAB_ID))
    ));

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,
            'tabId' => TAB_ID
        ),
    ),
));

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

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

Python

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

        }

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

後ろから書くことで、問題を簡素化します。挿入と同様に、テキストを削除すると、セグメント内の「下」にあるすべてのテキストのインデックスが変更されます。繰り返しになりますが、後方書き込みにより、インデックスの処理を簡素化できます。

テキストを移動する

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