插入、刪除及移動文字

Google 文件 API 可讓您在文件中插入或刪除文字。移動文字會涉及這兩項作業,並在內容前面加上 get

你可以在文件的任何 分頁部分 (內文、頁首、頁尾或腳註) 中插入或刪除文字。

插入文字

如要在文件中插入文字,請使用 documents.batchUpdate 方法,並加入 InsertTextRequest,其中文字和位置做為酬載。

以下程式碼範例顯示如何在文件主體的指定索引位置插入一系列文字字串。這個範例使用三個目標偏移值 (25、50 和 75),並在每個位置插入十個字元的字串。

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 個字元。
  • 第二個插入作業會在偏移量 50+10=60 處新增 10 個字元。
  • 第三個插入會在偏移量 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()

從後往前寫,簡化問題。與插入相同,刪除文字會變更區段中「下方」所有文字的索引。再次提醒,從後往前寫可簡化索引處理作業。

移動文字

如要移動文字,請在一個位置刪除文字,然後在其他位置插入。刪除內容不會提供副本 (沒有等同於剪貼簿的概念),因此你必須先擷取範圍的內容,才能在插入文字要求中使用。