Cómo insertar, borrar y mover texto

La API de Documentos de Google te permite insertar o borrar texto en un documento. El movimiento de texto implica ambas operaciones, precedidas por un get del contenido.

Puedes insertar o borrar texto en cualquiera de los segmentos de un documento (cuerpo, encabezado, pie de página o nota al pie).

Insertar texto

Para insertar texto en un documento, usa el método documents.batchUpdate y, además, incluye una InsertTextRequest con el texto y la ubicación como carga útil.

En la siguiente muestra de código, se indica cómo insertar una serie de cadenas de texto en ubicaciones de índice específicas dentro del cuerpo de un documento. En el ejemplo, se usan tres desplazamientos objetivo (25, 50 y 75) y se inserta una string de diez caracteres en cada ubicación.

Java

        List<Request> requests = new ArrayList<>();
        requests.add(new Request().setInsertText(new InsertTextRequest()
                .setText(text1)
                .setLocation(new Location().setIndex(25))));

        requests.add(new Request().setInsertText(new InsertTextRequest()
                .setText(text2)
                .setLocation(new Location().setIndex(50))));

        requests.add(new Request().setInsertText(new InsertTextRequest()
                .setText(text3)
                .setLocation(new Location().setIndex(75))));

        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,
        ),
    ),
    'insertText' => array(
        'text' => $text2,
        'location' => array(
            'index' => 50,
        ),
    ),
    'insertText' => array(
        'text' => $text3,
        'location' => array(
            'index' => 75,
        ),
    ),
));

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

$response = $service->documents->batchUpdate($documentId, $batchUpdateRequest);

Python

    requests = [
         {
            'insertText': {
                'location': {
                    'index': 25,
                },
                'text': text1
            }
        },
                 {
            'insertText': {
                'location': {
                    'index': 50,
                },
                'text': text2
            }
        },
                 {
            'insertText': {
                'location': {
                    'index': 75,
                },
                'text': text3
            }
        },
    ]

    result = service.documents().batchUpdate(
        documentId=DOCUMENT_ID, body={'requests': requests}).execute()

Cada inserción aumenta todos los índices con números más altos según el tamaño del texto insertado. En el ejemplo, se calcula previamente el resultado de estos cambios de índice para que las inserciones posteriores se realicen en el nuevo desplazamiento corregido. Por lo tanto, para insertar en los desplazamientos de destino originales de 25, 50 y 75, los índices de inserción reales son los siguientes:

  • La primera inserción agrega 10 caracteres en el desplazamiento 25.
  • La segunda inserción agrega 10 caracteres con el desplazamiento 50 + 10=60.
  • La tercera inserción agrega 10 caracteres con el desplazamiento 75+10+10=95.

Borrar texto

Para borrar texto de un documento, primero crea un Range que defina el rango de texto que se borrará. Luego, usa el método documents.batchUpdate e incluye un DeleteContentRangeRequest.

En la siguiente muestra de código, se indica cómo puedes borrar el texto entre el índice 10 y el 24 en el cuerpo de un documento.

Java

        List<Request> requests = new ArrayList<>();
        requests.add(new Request().setDeleteContentRange(
                new DeleteContentRangeRequest()
                        .setRange(new Range()
                                .setStartIndex(10)
                                .setEndIndex(24))
            ));

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

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

$response = $service->documents->batchUpdate($documentId, $batchUpdateRequest);

Python

    requests = [
        {
            'deleteContentRange': {
                'range': {
                    'startIndex': 10,
                    'endIndex': 24,
                }

            }

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

Escribe al revés para simplificar las cosas. Al igual que con las inserciones, borrar texto altera los índices de todo el texto “a continuación” en el segmento. Recuerda que la escritura hacia atrás puede simplificar el control de los índices.

Mover texto

Para mover texto, debes borrarlo en una ubicación y, luego, insertarlo en otro lugar. Borrar contenido no te proporciona una copia (no hay un concepto equivalente de portapapeles), por lo que primero debes extraer el contenido del rango para poder usarlo en tu solicitud de inserción de texto.