Inserir, excluir e mover texto

A API Documentos Google permite inserir ou excluir texto em um documento. Mover texto envolve as duas operações, precedidas por um get do conteúdo.

É possível inserir ou excluir texto em qualquer um dos segmentos de uma guia de documento (corpo, cabeçalho, rodapé ou nota de rodapé).

Inserir texto

Para inserir texto em um documento, use o método documents.batchUpdate e inclua um InsertTextRequest com o texto e o local como payload.

O exemplo de código abaixo mostra como inserir uma série de strings de texto em locais de índice especificados no corpo de um documento. O exemplo usa três deslocamentos de destino (25, 50 e 75) e insere uma string de dez caracteres em cada local.

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

Cada inserção incrementa todos os índices de números mais altos pelo tamanho do texto inserido. O exemplo calcula previamente o resultado dessas mudanças de índice para que as inserções subsequentes aconteçam no novo deslocamento corrigido. Assim, para inserir nos deslocamentos de destino originais de 25, 50 e 75, os índices de inserção reais são:

  • A primeira inserção adiciona 10 caracteres no deslocamento 25.
  • A segunda inserção adiciona 10 caracteres no deslocamento 50+10=60.
  • A terceira inserção adiciona 10 caracteres no deslocamento 75+10+10=95.

Excluir texto

Para excluir texto de um documento, primeiro construa um Range que defina o intervalo de texto a ser excluído. Em seguida, use o método documents.batchUpdate e inclua um DeleteContentRangeRequest.

O exemplo de código abaixo mostra como excluir o texto entre os índices 10 e 24 no corpo de um documento.

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

Simplifique as coisas escrevendo de trás para frente. Assim como nas inserções, a exclusão de texto altera os índices de todo o texto "abaixo" no segmento. Novamente, a gravação para trás pode simplificar o processamento de índices.

Mover texto

Para mover o texto, exclua-o em um local e insira-o em outro. A exclusão de conteúdo não gera uma cópia dele (não há um conceito equivalente de uma área de transferência). Portanto, extraia o conteúdo do intervalo primeiro para poder usá-lo na solicitação de inserção de texto.