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

API Google Docs позволяет вставлять или удалять текст в документе. Перемещение текста включает в себя обе операции, которым предшествует 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(<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 фактические индексы вставки будут следующими:

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

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

Чтобы удалить текст из документа, сначала создайте объект 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()

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

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

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