借助 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(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()
倒着写,让事情变得简单。 与插入一样,删除文本会更改相应段落中所有“下方”文本的索引。同样,反向写入可以简化索引处理。
移动文本
如需移动文字,您可以在一个位置删除文字,然后将其插入到其他位置。 删除内容不会为您提供相应内容的副本(没有剪贴板这样的等效概念),因此您必须先提取范围的内容,以便在插入文本请求中使用。