Работа со списками

API Google Docs поддерживает создание списков в новых документах, преобразование существующих абзацев в маркированные списки и удаление пунктов списка из абзацев.

Создайте нумерованный список в новом документе.

API Docs позволяет создавать нумерованный список в новом документе путем вставки текста и последующего применения к нему стиля списка в рамках одного пакетного запроса.

Чтобы создать нумерованный список в новом документе:

  1. Для создания документа используйте метод documents.create .

  2. Используйте метод documents.batchUpdate и передайте объект InsertTextRequest для добавления содержимого в документ. Используйте символы новой строки ( \n ) для разделения элементов списка.

  3. В рамках того же пакетного обновления добавьте метод CreateParagraphBulletsRequest , Range для указания диапазона текста и параметр BulletGlyphPreset для установки шаблона нумерации.

Приведенный ниже пример кода показывает, как создать документ, а затем вставить три элемента в виде нумерованного списка. BulletGlyphPreset использует NUMBERED_DECIMAL_ALPHA_ROMAN для форматирования списка. Это означает, что первые три уровня вложенности нумерованного списка представлены десятичным числом, строчной буквой и строчной римской цифрой.

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}")

Замените TAB_ID на идентификатор вкладки , содержащей содержимое списка.

Преобразовать абзац в список

Распространенной операцией форматирования абзацев является преобразование существующих абзацев в маркированный список.

Для создания списка используйте метод documents.batchUpdate и передайте объект CreateParagraphBulletsRequest . Укажите Range для определения затрагиваемого текста и объект BulletGlyphPreset для установки шаблона для маркера списка.

Все абзацы, перекрывающиеся с заданным диапазоном, отображаются в виде маркированных списков. Если указанный диапазон перекрывается с таблицей, маркеры применяются внутри ячеек таблицы. Уровень вложенности каждого абзаца определяется путем подсчета табуляции перед каждым абзацем.

Изменить уровень вложенности существующего маркера невозможно. Вместо этого необходимо удалить маркер, установить межстрочные отступы перед абзацем, а затем создать маркер заново. Дополнительную информацию см. в разделе «Удаление маркеров из списка» .

Также вы можете использовать CreateParagraphBulletsRequest для изменения стиля маркеров в существующем списке.

Приведенный ниже пример кода демонстрирует пакетный запрос, который сначала вставляет текст в начало документа, а затем создает список из абзацев, охватывающих первые 50 символов. Параметр BulletGlyphPreset использует BULLET_ARROW_DIAMOND_DISC , что означает, что первые три уровня вложенности маркированного списка представлены стрелкой, ромбом и диском.

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

Замените TAB_ID на идентификатор вкладки , содержащей содержимое списка, или опустите его, чтобы по умолчанию отображалась первая вкладка в документе.

Преобразовать абзац в список.
Рисунок 1. Преобразование абзаца в список.

Удалить пункты списка

Чтобы удалить маркеры из списка абзацев, используйте метод documents.batchUpdate и передайте запрос DeleteParagraphBulletsRequest . Укажите Range , чтобы обозначить затрагиваемый текст.

Этот метод удаляет все маркеры, перекрывающиеся с заданным диапазоном, независимо от уровня вложенности. Для визуального сохранения уровня вложенности в начало каждого соответствующего абзаца добавляется отступ.

Приведенный ниже пример кода демонстрирует пакетный запрос, удаляющий маркеры из списка абзацев.

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

Замените TAB_ID на идентификатор вкладки , содержащей содержимое списка, или опустите его, чтобы по умолчанию отображалась первая вкладка в документе.