插入、删除和移动文本

借助 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).setTabId(<var>TAB_ID</var>))));

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

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

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

PHP

$requests = array();

$requests[] = new Google_Service_Docs_Request(array(
    'insertText' => array(
        'text' => $text1,
        'location' => array(
            'index' => 25,
            'tabId' => <var>TAB_ID</var>,
        ),
    ),
));

$requests[] = new Google_Service_Docs_Request(array(
    'insertText' => array(
        'text' => $text2,
        'location' => array(
            'index' => 50,
            'tabId' => <var>TAB_ID</var>,
        ),
    ),
));

$requests[] = new Google_Service_Docs_Request(array(
    'insertText' => array(
        'text' => $text3,
        'location' => array(
            'index' => 75,
            'tabId' => <var>TAB_ID</var>,
        ),
    ),
));

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

$response = $service->documents->batchUpdate($<var>DOCUMENT_ID</var>, $batchUpdateRequest);

Python

requests = [
        {
        'insertText': {
            'location': {
                'index': 25,
                'tabId': <var>TAB_ID</var>
            },
            'text': text1
        }
    },
                {
        'insertText': {
            'location': {
                'index': 50,
                'tabId': <var>TAB_ID</var>
            },
            'text': text2
        }
    },
                {
        'insertText': {
            'location': {
                'index': 75,
                'tabId': <var>TAB_ID</var>
            },
            'text': text3
        }
    },
]

result = service.documents().batchUpdate(
    documentId=<var>DOCUMENT_ID</var>, 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(<var>TAB_ID</var>))
    ));

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

PHP

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

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

$response = $service->documents->batchUpdate(<var>DOCUMENT_ID</var>, $batchUpdateRequest);

Python

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

        }

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

与插入一样,删除文本也会更改该段中所有后续文本的索引。同样,反向编写可以 简化您对索引的处理。

移动文本

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