Вставка, удаление и перемещение текста

API Документов Google позволяет вставлять или удалять текст в документе. Перемещение текста включает в себя обе операции, которым предшествует get содержимого.

Вы можете вставлять или удалять текст в любом сегменте вкладки документа (в теле, заголовке, нижнем колонтитуле или сноске).

Вставить текст

Чтобы вставить текст в документ, используйте метод documents.batchUpdate и включите InsertTextRequest с текстом и местоположением в качестве полезных данных.

В следующем примере кода показано, как можно вставить серию текстовых строк в указанные индексные места в тексте документа. В примере используются три целевых смещения (25, 50 и 75) и в каждое место вставляется строка из десяти символов.

Ява

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

Питон

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 фактические индексы вставки будут следующими:

  • Первая вставка добавляет 10 символов по смещению 25.
  • Вторая вставка добавляет 10 символов по смещению 50+10=60.
  • Третья вставка добавляет 10 символов по смещению 75+10+10=95.

Удалить текст

Чтобы удалить текст из документа, сначала создайте Range , который определяет диапазон удаляемого текста. Затем используйте метод documents.batchUpdate и включите DeleteContentRangeRequest .

В следующем примере кода показано, как можно удалить текст между индексами 10 и 24 в тексте документа.

Ява

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

Питон

requests = [     {         'deleteContentRange': {             'range': {                 'startIndex': 10,                 'endIndex': 24,                 'tabId': TAB_ID             }          }      }, ] result = service.documents().batchUpdate(     documentId=DOCUMENT_ID, body={'requests': requests}).execute()

Упростите ситуацию, написав наоборот. Как и в случае вставки, удаление текста изменяет индексы всего текста «ниже» в сегменте. Опять же, запись в обратном направлении может упростить обработку индексов.

Переместить текст

Чтобы переместить текст, вы удаляете его в одном месте, а затем вставляете в другое. Удаление содержимого не дает вам его копии (эквивалентной концепции буфера обмена не существует), поэтому вам необходимо сначала извлечь содержимое диапазона, чтобы его можно было использовать в запросе на вставку текста.