Praca z listami

Interfejs Google Docs API umożliwia tworzenie list w nowych dokumentach, przekształcanie istniejących zwykłych akapitów w listy punktowane i usuwanie punktorów z akapitów.

Tworzenie listy numerowanej w nowym dokumencie

Interfejs Docs API umożliwia utworzenie listy numerowanej w nowym dokumencie przez wstawienie tekstu, a następnie zastosowanie do niego stylu listy w ramach jednego żądania wsadowego.

Aby utworzyć listę numerowaną w nowym dokumencie:

  1. Aby utworzyć dokument, użyj metody documents.create.

  2. Użyj metody documents.batchUpdate i podaj InsertTextRequest, aby dodać treść do dokumentu. Użyj znaków nowego wiersza (\n), aby rozdzielić elementy listy.

  3. W tej samej aktualizacji zbiorczej uwzględnij CreateParagraphBulletsRequest, Range, aby określić zakres tekstu, oraz BulletGlyphPreset, aby ustawić wzorzec numerowania.

Poniższy przykładowy kod pokazuje, jak utworzyć dokument, a następnie wstawić 3 elementy jako listę numerowaną. Do formatowania listy używa się znaku BulletGlyphPresetNUMBERED_DECIMAL_ALPHA_ROMAN. Oznacza to, że pierwsze 3 poziomy zagnieżdżenia listy numerowanej są reprezentowane przez liczbę dziesiętną, małą literę i małą cyfrę rzymską.

Java

Document doc = new Document().setTitle("New List Document");
doc = docsService.documents().create(doc).execute();
String documentId = doc.getDocumentId();

List<Request> requests = new ArrayList<>();
requests.add(new Request().setInsertText(new InsertTextRequest()
        .setText("Item 1\nItem 2\nItem 3\n")
        .setLocation(new Location().setIndex(1).setTabId(TAB_ID))));

requests.add(new Request().setCreateParagraphBullets(
        new CreateParagraphBulletsRequest()
                .setRange(new Range()
                        .setStartIndex(1)
                        .setEndIndex(22)
                        .setTabId(TAB_ID))
                .setBulletPreset("NUMBERED_DECIMAL_ALPHA_ROMAN")));

BatchUpdateDocumentRequest body = new BatchUpdateDocumentRequest().setRequests(requests);
docsService.documents().batchUpdate(documentId, body).execute();

System.out.println("Created document with ID: " + documentId);

Python

title = 'New List Document'
body = {'title': title}
doc = service.documents().create(body=body).execute()
document_id = doc.get('documentId')

requests = [
    {
        'insertText': {
            'location': {
                'index': 1,
                'tabId': TAB_ID
            },
            'text': 'Item 1\nItem 2\nItem 3\n'
        }
    },
    {
        'createParagraphBullets': {
            'range': {
                'startIndex': 1,
                'endIndex': 22,
                'tabId': TAB_ID
            },
            'bulletPreset': 'NUMBERED_DECIMAL_ALPHA_ROMAN'
        }
    }
]

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

print(f"Created document with ID: {document_id}")

Zastąp TAB_ID identyfikatorem karty, która zawiera treść listy.

Przekształcanie akapitu w listę

Częstą operacją formatowania akapitu jest przekształcanie istniejących akapitów w listę punktowaną.

Aby utworzyć listę, użyj metody documents.batchUpdate i podaj CreateParagraphBulletsRequest. Dodaj Range, aby określić tekst, którego dotyczy problem, oraz BulletGlyphPreset, aby ustawić wzorzec punktorów.

Wszystkie akapity, które pokrywają się z podanym zakresem, są oznaczone punktorem. Jeśli określony zakres nakłada się na tabelę, punktor zostanie zastosowany w komórkach tabeli. Poziom zagnieżdżenia każdego akapitu jest określany przez zliczenie tabulatorów na początku każdego akapitu.

Nie możesz dostosować poziomu zagnieżdżenia istniejącego punktu. Zamiast tego musisz usunąć punktor, ustawić tabulatory przed akapitem, a następnie ponownie utworzyć punktor. Więcej informacji znajdziesz w artykule Usuwanie punktorów z listy.

Możesz też użyć CreateParagraphBulletsRequest, aby zmienić styl punktorów na istniejącej liście.

Poniższy przykładowy kod pokazuje żądanie wsadowe, które najpierw wstawia tekst na początku dokumentu, a następnie tworzy listę z akapitów obejmujących pierwsze 50 znaków. BulletGlyphPreset używa BULLET_ARROW_DIAMOND_DISC, co oznacza, że pierwsze 3 poziomy zagnieżdżenia listy punktowanej są reprezentowane przez strzałkę, romb i dysk.

Java

List<Request> requests = new ArrayList<>();
requests.add(new Request().setInsertText(new InsertTextRequest()
        .setText("Item One\n")
        .setLocation(new Location().setIndex(1).setTabId(TAB_ID))));

requests.add(new Request().setCreateParagraphBullets(
        new CreateParagraphBulletsRequest()
                .setRange(new Range()
                        .setStartIndex(1)
                        .setEndIndex(50)
                        .setTabId(TAB_ID))
                .setBulletPreset("BULLET_ARROW_DIAMOND_DISC")));

BatchUpdateDocumentRequest body = new BatchUpdateDocumentRequest().setRequests(requests);
BatchUpdateDocumentResponse response = docsService.documents()
        .batchUpdate(DOCUMENT_ID, body).execute();

Python

requests = [
        {
        'insertText': {
            'location': {
                'index': 1,
                'tabId': TAB_ID
            },
            'text': 'Item One\n',
        }}, {
        'createParagraphBullets': {
            'range': {
                'startIndex': 1,
                'endIndex':  50,
                'tabId': TAB_ID
            },
            'bulletPreset': 'BULLET_ARROW_DIAMOND_DISC',
        }
    }
]

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

Zastąp TAB_ID identyfikatorem karty zawierającej treść listy lub pomiń ten parametr, aby domyślnie użyć pierwszej karty w dokumencie.

Przekształć akapit w listę.
Rysunek 1. Przekształć akapit w listę.

Usuwanie punktorów z listy

Aby usunąć punktor z listy akapitów, użyj metody documents.batchUpdate i podaj DeleteParagraphBulletsRequest. Dodaj Range, aby określić tekst, którego dotyczy zmiana.

Metoda usuwa wszystkie punktorów, które nakładają się na podany zakres, niezależnie od poziomu zagnieżdżenia. Aby wizualnie zachować poziom zagnieżdżenia, na początku każdego odpowiedniego akapitu dodawane jest wcięcie.

Poniższy przykładowy kod pokazuje żądanie wsadowe, które usuwa punktor z listy akapitów.

Java

List<Request> requests = new ArrayList<>();
requests.add(new Request().setDeleteParagraphBullets(
        new DeleteParagraphBulletsRequest()
                .setRange(new Range()
                        .setStartIndex(1)
                        .setEndIndex(50)
                        .setTabId(TAB_ID))));

BatchUpdateDocumentRequest body = new BatchUpdateDocumentRequest().setRequests(requests);
BatchUpdateDocumentResponse response = docsService.documents()
        .batchUpdate(DOCUMENT_ID, body).execute();

Python

requests = [
        {
        'deleteParagraphBullets': {
            'range': {
                'startIndex': 1,
                'endIndex':  50,
                'tabId': TAB_ID
            },
        }
    }
]

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

Zastąp TAB_ID identyfikatorem karty zawierającej treść listy lub pomiń ten parametr, aby domyślnie użyć pierwszej karty w dokumencie.