Inserire, eliminare e spostare testo

L'API Documenti Google consente di inserire o eliminare testo in un documento. Lo spostamento del testo comporta entrambe le operazioni, precedute dal carattere get dei contenuti.

Puoi inserire o eliminare testo in qualsiasi segmento del documento (corpo, intestazione, piè di pagina o nota a piè di pagina).

Inserisci testo

Per inserire testo in un documento, usa il metodo documents.batchUpdate e includi un InsertTextRequest con il testo e la posizione come payload.

Il seguente esempio di codice mostra come inserire una serie di stringhe di testo in posizioni di indice specificate nel corpo di un documento. L'esempio utilizza tre offset target (25, 50 e 75) e inserisce una stringa di dieci caratteri in ogni posizione.

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

Ogni inserimento incrementa tutti gli indici con numero più alto in base alla dimensione del testo inserito. L'esempio precalcola il risultato di queste modifiche dell'indice in modo che gli inserimenti successivi avvengano in corrispondenza del nuovo offset corretto. Pertanto, per inserire gli offset di destinazione originali di 25, 50 e 75, gli indici di inserzione effettivi sono:

  • Il primo inserimento aggiunge 10 caratteri all'offset 25.
  • Il secondo inserimento aggiunge 10 caratteri con offset 50 + 10=60.
  • Il terzo inserimento aggiunge 10 caratteri con offset 75 + 10 + 10=95.

Eliminare il testo

Per eliminare il testo da un documento, devi prima creare un elemento Range che definisca l'intervallo di testo da eliminare. Quindi usa il metodo documents.batchUpdate e includi un DeleteContentRangeRequest.

Il seguente esempio di codice mostra come eliminare il testo tra gli indici 10 e 24 nel corpo di 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()

Semplifica le cose scrivendo a ritroso. Come per gli inserti, l'eliminazione del testo modifica gli indici di tutto il testo "sotto" nel segmento. Anche in questo caso, la scrittura a ritroso può semplificare la gestione degli indici.

Sposta testo

Per spostare il testo, eliminalo in una posizione e inseriscilo altrove. L'eliminazione dei contenuti non ne fornisce una copia (non esiste un concetto equivalente degli appunti), pertanto devi prima estrarre i contenuti dell'intervallo in modo da poterli utilizzare nella richiesta di inserimento del testo.