插入、删除和移动文本

通过 Google 文档 API,您可以在文档中插入或删除文本。移动文本涉及上述两项操作,前面是内容的 get

您可以在文档的任何段(正文、页眉、页脚或脚注)中插入或删除文本。

插入文本

如需将文本插入文档,请使用 documents.batchUpdate 方法,并添加一个 InsertTextRequest,并将文本和位置作为载荷。

以下代码示例展示了如何在文档正文的指定索引位置插入一系列文本字符串。该示例使用三个目标偏移(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 个字符。
  • 第二次插入在偏移量 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))
            ));

        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()

向后写内容以简化问题。与插入一样,删除文本会更改句段中“以下”所有文本的索引。同样,向后写入可以简化您对索引的处理方式。

移动文本

如要移动文本,请在一个位置将其删除,然后在其他位置插入。 删除内容并不会为您提供内容的副本(没有剪贴板的等效概念),因此您必须先提取相应范围的内容,以便在插入文本请求中使用。