Wstawianie, usuwanie i przenoszenie tekstu

Interfejs Google Docs API umożliwia wstawianie i usuwanie tekstu w dokumencie. Przenoszenie tekstu obejmuje obie operacje poprzedzone get treści.

Tekst możesz wstawiać i usuwać w dowolnym segmencie karty dokumentu (tekst główny, nagłówek, stopka lub przypis).

Wstaw tekst

Aby wstawić tekst do dokumentu, użyj metody documents.batchUpdate i dołącz InsertTextRequestz tekstem i lokalizacją jako ładunkiem.

Poniższy przykładowy kod pokazuje, jak wstawić ciągi tekstowe w określonych miejscach indeksu w ciele dokumentu. Przykład używa 3 wartości przesunięcia docelowego (25, 50 i 75) i wstawia w każdym miejscu ciąg znaków o długości 10 znaków.

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

Każde wstawienie zwiększa wszystkie indeksy o większej numeracji o rozmiar wstawianego tekstu. Przykładowo, wynik tych zmian indeksu jest obliczany z wyprzedzeniem, aby kolejne wstawiane elementy były dodawane z nowym, poprawionym przesunięciem. Dlatego w przypadku wstawiania przy pierwotnych wartościach przesunięcia docelowego 25, 50 i 75 wartości indeksów rzeczywistego wstawiania są następujące:

  • Pierwsze wstawienie dodaje 10 znaków w przesuniętych o 25 znaków.
  • Drugie wstawienie dodaje 10 znaków w offset 50+10=60.
  • Trzecie wstawienie dodaje 10 znaków w wymiarze 75 + 10 + 10=95.

Usuwanie tekstu

Aby usunąć tekst z dokumentu, najpierw utwórz element Range, który definiuje zakres tekstu do usunięcia. Następnie użyj metody documents.batchUpdate, podając DeleteContentRangeRequest.

Poniższy przykładowy kod pokazuje, jak usunąć tekst między indeksem 10 a 24 w tekstowej treści dokumentu.

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

Uprość sobie życie, pisząc od tyłu do przodu. Podobnie jak w przypadku wstawień, usunięcie tekstu zmienia indeksy całego tekstu „poniżej” w danym segmencie. Ponownie, pisanie od końca może ułatwić obsługę indeksów.

Przenoszenie tekstu

Aby przenieść tekst, należy go usunąć z jednego miejsca i wstawić w innym. Usunięcie treści nie powoduje utworzenia ich kopii (nie ma odpowiednika schowka), więc musisz najpierw wyodrębnić zawartość zakresu, aby móc użyć jej w żądaniu wstawiania tekstu.