На этой странице вы узнаете, как редактировать и оформлять текст в презентации с помощью API Slides.
О тексте
Текст в презентации всегда находится внутри фигуры или ячейки таблицы. API позволяет изменять этот текст несколькими способами:
- Вы можете вставлять, удалять или заменять текст в своей презентации.
- Вы можете добавить форматирование абзацев для создания маркированных списков.
- Вы можете изменить форматирование символов, например, полужирный шрифт, курсив, цвет, размер шрифта или гиперссылки.
Общий обзор принципов работы стилизации текста в API Slides можно найти на странице «Структура и стилизация текста» . Также посмотрите видео выше, чтобы увидеть полноценный пример (Python), объединяющий несколько концепций форматирования из разделов ниже.
Вставка, удаление или замена текста
Заменить текст в презентации с помощью API Slides можно двумя способами: выполняя глобальный поиск и замену или явно удаляя и добавляя текст. Оба способа используют метод batchUpdate , но с разными типами запросов.
Глобальный поиск и замена
Используйте ReplaceAllTextRequest для выполнения глобального поиска и замены по всей презентации.
Раздел «Объединение текста» руководства «Объединение данных» содержит пример того, как можно использовать этот тип запроса.
Замена текста внутри фигуры
API Slides позволяет изменять текстовое содержимое фигуры. Вы можете удалять отдельные фрагменты текста и вставлять текст в определённое место.
Для выполнения этих операций используйте InsertTextRequest и DeleteTextRequest .
Замена определенного участка текста состоит из удаления и последующей вставки. Эту операцию можно выполнить, выполнив следующие шаги:
- Определите элемент страницы, содержащий текст.
- Определите начальную и конечную позицию текста, который необходимо заменить.
- Вызовите
batchUpdate
со следующими двумя запросами:- DeleteTextRequest , указывающий диапазон текста для удаления.
- InsertTextRequest , указывающий ту же начальную позицию, а также текстовую строку для вставки.
Чтобы обеспечить атомарность при такой замене текста, обязательно включите оба запроса в один вызов batchUpdate. Это показано в следующем примере, где весь текст в фигуре заменяется новым текстом:
Скрипт приложений
/** * Remove existing text in the shape, then insert new text. * @param {string} presentationId * @param {string?} shapeId * @param {string} replacementText * @returns {*} */ function simpleTextReplace(presentationId, shapeId, replacementText) { const requests = [{ deleteText: { objectId: shapeId, textRange: { type: 'ALL' } } }, { insertText: { objectId: shapeId, insertionIndex: 0, text: replacementText } }]; // Execute the requests. try { const batchUpdateResponse = Slides.Presentations.batchUpdate({ requests: requests }, presentationId); console.log('Replaced text in shape with ID: %s', shapeId); return batchUpdateResponse; } catch (err) { // TODO (Developer) - Handle exception console.log('Failed with error: %s', err.error); } };
Идти
// Remove existing text in the shape, then insert the new text. requests := []*slides.Request{{ DeleteText: &slides.DeleteTextRequest{ ObjectId: shapeId, TextRange: &slides.Range{ Type: "All", }, }, }, { InsertText: &slides.InsertTextRequest{ ObjectId: shapeId, InsertionIndex: 0, Text: replacementText, }, }} // Execute the requests. body := &slides.BatchUpdatePresentationRequest{Requests: requests} response, _ := slidesService.Presentations.BatchUpdate(presentationId, body).Do() fmt.Printf("Replaced text in shape with ID: %s", shapeId)
Ява
import com.google.api.client.googleapis.json.GoogleJsonError; import com.google.api.client.googleapis.json.GoogleJsonResponseException; import com.google.api.client.http.HttpRequestInitializer; import com.google.api.client.http.javanet.NetHttpTransport; import com.google.api.client.json.gson.GsonFactory; import com.google.api.services.slides.v1.Slides; import com.google.api.services.slides.v1.SlidesScopes; import com.google.api.services.slides.v1.model.BatchUpdatePresentationRequest; import com.google.api.services.slides.v1.model.BatchUpdatePresentationResponse; import com.google.api.services.slides.v1.model.DeleteTextRequest; import com.google.api.services.slides.v1.model.InsertTextRequest; import com.google.api.services.slides.v1.model.Range; import com.google.api.services.slides.v1.model.Request; import com.google.auth.http.HttpCredentialsAdapter; import com.google.auth.oauth2.GoogleCredentials; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.List; /* Class to demonstrate the use of Slides Replace Text API */ public class SimpleTextReplace { /** * Remove existing text in the shape, then insert new text. * * @param presentationId - id of the presentation. * @param shapeId - id of the shape. * @param replacementText - New replacement text. * @return response * @throws IOException - if credentials file not found. */ public static BatchUpdatePresentationResponse simpleTextReplace( String presentationId, String shapeId, String replacementText) throws IOException { /* Load pre-authorized user credentials from the environment. TODO(developer) - See https://developers.google.com/identity for guides on implementing OAuth2 for your application. */ GoogleCredentials credentials = GoogleCredentials.getApplicationDefault() .createScoped(Collections.singleton(SlidesScopes.PRESENTATIONS)); HttpRequestInitializer requestInitializer = new HttpCredentialsAdapter( credentials); // Create the slides API client Slides service = new Slides.Builder(new NetHttpTransport(), GsonFactory.getDefaultInstance(), requestInitializer) .setApplicationName("Slides samples") .build(); // Remove existing text in the shape, then insert the new text. List<Request> requests = new ArrayList<>(); requests.add(new Request() .setDeleteText(new DeleteTextRequest() .setObjectId(shapeId) .setTextRange(new Range() .setType("ALL")))); requests.add(new Request() .setInsertText(new InsertTextRequest() .setObjectId(shapeId) .setInsertionIndex(0) .setText(replacementText))); BatchUpdatePresentationResponse response = null; try { // Execute the requests. BatchUpdatePresentationRequest body = new BatchUpdatePresentationRequest().setRequests(requests); response = service.presentations().batchUpdate(presentationId, body).execute(); System.out.println("Replaced text in shape with ID: " + shapeId); } catch (GoogleJsonResponseException e) { // TODO(developer) - handle error appropriately GoogleJsonError error = e.getDetails(); if (error.getCode() == 400) { System.out.printf("Shape not found with id '%s'.\n", shapeId); } else if (error.getCode() == 404) { System.out.printf("Presentation not found with id '%s'.\n", presentationId); } else { throw e; } } return response; } }
JavaScript
function simpleTextReplace(presentationId, shapeId, replacementText, callback) { // Remove existing text in the shape, then insert new text. const requests = [{ deleteText: { objectId: shapeId, textRange: { type: 'ALL', }, }, }, { insertText: { objectId: shapeId, insertionIndex: 0, text: replacementText, }, }]; // Execute the requests. try { gapi.client.slides.presentations.batchUpdate({ presentationId: presentationId, requests: requests, }).then((batchUpdateResponse) => { console.log(`Replaced text in shape with ID: ${shapeId}`); if (callback) callback(batchUpdateResponse.result); }); } catch (err) { document.getElementById('content').innerText = err.message; return; } }
Node.js
/** * Replaces text in the provided shape ID. * @param {string} presentationId The presentation ID. * @param {string} shapeId The shape ID to delete existing text and insert new text into. * @param {string} replacementText The new replacement text. */ async function simpleTextReplace(presentationId, shapeId, replacementText) { const {GoogleAuth} = require('google-auth-library'); const {google} = require('googleapis'); const auth = new GoogleAuth({ scopes: 'https://www.googleapis.com/auth/presentations', }); const service = google.slides({version: 'v1', auth}); // Remove existing text in the shape, then insert new text. const requests = [ { deleteText: { objectId: shapeId, textRange: { type: 'ALL', }, }, }, { insertText: { objectId: shapeId, insertionIndex: 0, text: replacementText, }, }, ]; // Execute the requests. try { const batchUpdateResponse = await service.presentations.batchUpdate({ presentationId, resource: { requests, }, }); console.log(`Replaced text in shape with ID: ${shapeId}`); return batchUpdateResponse.data; } catch (err) { // TODO (developer) - Handle exception throw err; } }
PHP
<?php use Google\Client; use Google\Service\Drive; use Google\Service\Slides; use Google\Service\Slides\Request; function simpleTextReplace($presentationId, $shapeId, $replacementText) { /* Load pre-authorized user credentials from the environment. TODO(developer) - See https://developers.google.com/identity for guides on implementing OAuth2 for your application. */ $client = new Google\Client(); $client->useApplicationDefaultCredentials(); $client->addScope(Google\Service\Drive::DRIVE); $slidesService = new Google_Service_Slides($client); // Remove existing text in the shape, then insert new text. $requests = array(); $requests[] = new Google_Service_Slides_Request(array( 'deleteText' => array( 'objectId' => $shapeId, 'textRange' => array( 'type' => 'ALL' ) ) )); $requests[] = new Google_Service_Slides_Request(array( 'insertText' => array( 'objectId' => $shapeId, 'insertionIndex' => 0, 'text' => $replacementText ) )); // Execute the requests. $batchUpdateRequest = new Google_Service_Slides_BatchUpdatePresentationRequest(array( 'requests' => $requests )); $response = $slidesService->presentations->batchUpdate($presentationId, $batchUpdateRequest); printf("Replaced text in shape with ID: %s", $shapeId); return $response; }
Питон
import google.auth from googleapiclient.discovery import build from googleapiclient.errors import HttpError def simple_text_replace(presentation_id, shape_id, replacement_text): """ Run simple_text_replace the user has access to. Load pre-authorized user credentials from the environment. TODO(developer) - See https://developers.google.com/identity for guides on implementing OAuth2 for the application. """ creds, _ = google.auth.default() # pylint: disable=maybe-no-member try: slides_service = build("slides", "v1", credentials=creds) # Remove existing text in the shape, then insert new text. requests = [] requests.append( {"deleteText": {"objectId": shape_id, "textRange": {"type": "ALL"}}} ) requests.append( { "insertText": { "objectId": shape_id, "insertionIndex": 0, "text": replacement_text, } } ) # Execute the requests. body = {"requests": requests} response = ( slides_service.presentations() .batchUpdate(presentationId=presentation_id, body=body) .execute() ) print(f"Replaced text in shape with ID: {shape_id}") return response except HttpError as error: print(f"An error occurred: {error}") print("Text is not merged") return error if __name__ == "__main__": # Put the presentation_id, shape_id and replacement_text simple_text_replace( "10QnVUx1X2qHsL17WUidGpPh_SQhXYx40CgIxaKk8jU4", "MyTextBox_6", "GWSpace_now", )
Руби
# Remove existing text in the shape, then insert new text. requests = [] << { delete_text: { object_id_prop: shape_id, text_range: { type: 'ALL' } } } << { insert_text: { object_id_prop: shape_id, insertion_index: 0, text: replacement_text } } # Execute the requests. req = Google::Apis::SlidesV1::BatchUpdatePresentationRequest.new(requests: requests) response = slides_service.batch_update_presentation( presentation_id, req ) puts "Replaced text in shape with ID: #{shape_id}"
Изменение форматирования символов
Форматирование символов определяет отображение текстовых символов в презентации, включая шрифт, цвет и гиперссылки.
На странице концепций «Структура и стилизация текста» описывается, как API Slides представляет информацию о стилизации текста.
Чтобы изменить форматирование текста, используйте batchUpdate
с UpdateTextStyleRequest . Вам необходимо указать идентификатор фигуры или ячейки таблицы, содержащей текст, а также диапазон , включающий следующую информацию:
- Спецификатор
FIXED_RANGE
вместе с начальным и конечным индексами, определяющими диапазон текста, который вы хотите стилизовать. - Спецификатор
FROM_START_INDEX
вместе с начальным индексом, определяющим начало текстового диапазона, который вы хотите стилизовать. - Спецификатор
ALL
без индексов для стилизации всего текста в целевой форме.
В следующем примере выполняется несколько операций по стилизации текста, содержащегося в фигуре:
- Устанавливает шрифт символов 0-4 на полужирный курсив.
- Устанавливает цвет символов 5–9 на
blue
шрифт Times New Roman размером 14 пунктов. - Гиперссылка символов 10-14 на
www.example.com
.
Самый простой способ сделать это — создать список запросов, а затем использовать один вызов batchUpdate :
Скрипт приложений
/** * Update the text style so that the first 5 characters are bolded * and italicized, the next 5 are displayed in blue 14 pt Times * New Roman font, and the next 5 are hyperlinked. * @param {string} presentationId * @param {string} shapeId * @returns {*} */ function textStyleUpdate(presentationId, shapeId) { const requests = [{ updateTextStyle: { objectId: shapeId, textRange: { type: 'FIXED_RANGE', startIndex: 0, endIndex: 5 }, style: { bold: true, italic: true }, fields: 'bold,italic' } }, { updateTextStyle: { objectId: shapeId, textRange: { type: 'FIXED_RANGE', startIndex: 5, endIndex: 10 }, style: { fontFamily: 'Times New Roman', fontSize: { magnitude: 14, unit: 'PT' }, foregroundColor: { opaqueColor: { rgbColor: { blue: 1.0, green: 0.0, red: 0.0 } } } }, fields: 'foregroundColor,fontFamily,fontSize' } }, { updateTextStyle: { objectId: shapeId, textRange: { type: 'FIXED_RANGE', startIndex: 10, endIndex: 15 }, style: { link: { url: 'www.example.com' } }, fields: 'link' } }]; // Execute the requests. try { const batchUpdateResponse = Slides.Presentations.batchUpdate({ requests: requests }, presentationId); console.log('Updated the text style for shape with ID: %s', shapeId); return batchUpdateResponse; } catch (err) { // TODO (Developer) - Handle exception console.log('Failed with error: %s', err.error); } };
Идти
// Update the text style so that the first 5 characters are bolded // and italicized, and the next 5 are displayed in blue 14 pt Times // New Roman font, and the next five are hyperlinked. requests := []*slides.Request{{ UpdateTextStyle: &slides.UpdateTextStyleRequest{ ObjectId: shapeId, TextRange: &slides.Range{ Type: "FIXED_RANGE", StartIndex: ptrInt64(0), EndIndex: ptrInt64(5), ForceSendFields: []string{"StartIndex"}, }, Style: &slides.TextStyle{ Bold: true, Italic: true, }, Fields: "bold,italic", }, }, { UpdateTextStyle: &slides.UpdateTextStyleRequest{ ObjectId: shapeId, TextRange: &slides.Range{ Type: "FIXED_RANGE", StartIndex: ptrInt64(5), EndIndex: ptrInt64(10), }, Style: &slides.TextStyle{ FontFamily: "Times New Roman", FontSize: &slides.Dimension{ Magnitude: 14.0, Unit: "PT", }, ForegroundColor: &slides.OptionalColor{ OpaqueColor: &slides.OpaqueColor{ RgbColor: &slides.RgbColor{ Blue: 1.0, Green: 0.0, Red: 0.0, }, }, }, }, Fields: "foregroundColor,fontFamily,fontSize", }, }, { UpdateTextStyle: &slides.UpdateTextStyleRequest{ ObjectId: shapeId, TextRange: &slides.Range{ Type: "FIXED_RANGE", StartIndex: ptrInt64(10), EndIndex: ptrInt64(15), }, Style: &slides.TextStyle{ Link: &slides.Link{ Url: "www.example.com", }, }, Fields: "link", }, }} // Execute the requests. body := &slides.BatchUpdatePresentationRequest{Requests: requests} response, _ := slidesService.Presentations.BatchUpdate(presentationId, body).Do() fmt.Printf("Updated text style for shape with ID: %s", shapeId)
Ява
import com.google.api.client.googleapis.json.GoogleJsonError; import com.google.api.client.googleapis.json.GoogleJsonResponseException; import com.google.api.client.http.HttpRequestInitializer; import com.google.api.client.http.javanet.NetHttpTransport; import com.google.api.client.json.gson.GsonFactory; import com.google.api.services.slides.v1.Slides; import com.google.api.services.slides.v1.SlidesScopes; import com.google.api.services.slides.v1.model.BatchUpdatePresentationRequest; import com.google.api.services.slides.v1.model.BatchUpdatePresentationResponse; import com.google.api.services.slides.v1.model.Dimension; import com.google.api.services.slides.v1.model.Link; import com.google.api.services.slides.v1.model.OpaqueColor; import com.google.api.services.slides.v1.model.OptionalColor; import com.google.api.services.slides.v1.model.Range; import com.google.api.services.slides.v1.model.Request; import com.google.api.services.slides.v1.model.RgbColor; import com.google.api.services.slides.v1.model.TextStyle; import com.google.api.services.slides.v1.model.UpdateTextStyleRequest; import com.google.auth.http.HttpCredentialsAdapter; import com.google.auth.oauth2.GoogleCredentials; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.List; /* Class to demonstrate the use of Slide Text Structure and Styling API */ public class TextStyleUpdate { /** * Styles text in the shape. * * @param presentationId - id of the presentation. * @param shapeId - id of the shape. * @return shape id * @throws IOException - if credentials file not found. */ public static BatchUpdatePresentationResponse textStyleUpdate(String presentationId, String shapeId) throws IOException { /* Load pre-authorized user credentials from the environment. TODO(developer) - See https://developers.google.com/identity for guides on implementing OAuth2 for your application. */ GoogleCredentials credentials = GoogleCredentials.getApplicationDefault() .createScoped(Collections.singleton(SlidesScopes.PRESENTATIONS)); HttpRequestInitializer requestInitializer = new HttpCredentialsAdapter( credentials); // Create the slides API client Slides service = new Slides.Builder(new NetHttpTransport(), GsonFactory.getDefaultInstance(), requestInitializer) .setApplicationName("Slides samples") .build(); // Update the text style so that the first 5 characters are bolded // and italicized, and the next 5 are displayed in blue 14 pt Times // New Roman font, and the next five are hyperlinked. List<Request> requests = new ArrayList<>(); requests.add(new Request() .setUpdateTextStyle(new UpdateTextStyleRequest() .setObjectId(shapeId) .setTextRange(new Range() .setType("FIXED_RANGE") .setStartIndex(0) .setEndIndex(5)) .setStyle(new TextStyle() .setBold(true) .setItalic(true)) .setFields("bold,italic"))); requests.add(new Request() .setUpdateTextStyle(new UpdateTextStyleRequest() .setObjectId(shapeId) .setTextRange(new Range() .setType("FIXED_RANGE") .setStartIndex(5) .setEndIndex(10)) .setStyle(new TextStyle() .setFontFamily("Times New Roman") .setFontSize(new Dimension() .setMagnitude(14.0) .setUnit("PT")) .setForegroundColor(new OptionalColor() .setOpaqueColor(new OpaqueColor() .setRgbColor(new RgbColor() .setBlue(1.0F) .setGreen(0.0F) .setRed(0.0F))))) .setFields("foregroundColor,fontFamily,fontSize"))); requests.add(new Request() .setUpdateTextStyle(new UpdateTextStyleRequest() .setObjectId(shapeId) .setTextRange(new Range() .setType("FIXED_RANGE") .setStartIndex(10) .setEndIndex(15)) .setStyle(new TextStyle() .setLink(new Link() .setUrl("www.example.com"))) .setFields("link"))); BatchUpdatePresentationResponse response = null; try { // Execute the requests. BatchUpdatePresentationRequest body = new BatchUpdatePresentationRequest().setRequests(requests); response = service.presentations().batchUpdate(presentationId, body).execute(); System.out.println("Updated text style for shape with ID: " + shapeId); } catch (GoogleJsonResponseException e) { // TODO(developer) - handle error appropriately GoogleJsonError error = e.getDetails(); if (error.getCode() == 400) { System.out.printf("Shape not found with id '%s'.\n", shapeId); } else if (error.getCode() == 404) { System.out.printf("Presentation not found with id '%s'.\n", presentationId); } else { throw e; } } return response; } }
JavaScript
function textStyleUpdate(presentationId, shapeId, callback) { // Update the text style so that the first 5 characters are bolded // and italicized, the next 5 are displayed in blue 14 pt Times // New Roman font, and the next 5 are hyperlinked. const requests = [{ updateTextStyle: { objectId: shapeId, textRange: { type: 'FIXED_RANGE', startIndex: 0, endIndex: 5, }, style: { bold: true, italic: true, }, fields: 'bold,italic', }, }, { updateTextStyle: { objectId: shapeId, textRange: { type: 'FIXED_RANGE', startIndex: 5, endIndex: 10, }, style: { fontFamily: 'Times New Roman', fontSize: { magnitude: 14, unit: 'PT', }, foregroundColor: { opaqueColor: { rgbColor: { blue: 1.0, green: 0.0, red: 0.0, }, }, }, }, fields: 'foregroundColor,fontFamily,fontSize', }, }, { updateTextStyle: { objectId: shapeId, textRange: { type: 'FIXED_RANGE', startIndex: 10, endIndex: 15, }, style: { link: { url: 'www.example.com', }, }, fields: 'link', }, }]; // Execute the requests. try { gapi.client.slides.presentations.batchUpdate({ presentationId: presentationId, requests: requests, }).then((batchUpdateResponse) => { console.log(`Updated the text style for shape with ID: ${shapeId}`); if (callback) callback(batchUpdateResponse.result); }); } catch (err) { document.getElementById('content').innerText = err.message; return; } }
Node.js
/** * Updates text style for a specific presentation's shape ID. * @param {string} presentationId The presentation ID. * @param {string} shapeId The shape ID. */ async function textStyleUpdate(presentationId, shapeId) { // Update the text style so that the first 5 characters are bolded // and italicized, the next 5 are displayed in blue 14 pt Times // New Roman font, and the next 5 are hyperlinked. const {GoogleAuth} = require('google-auth-library'); const {google} = require('googleapis'); const auth = new GoogleAuth({ scopes: 'https://www.googleapis.com/auth/presentations', }); const service = google.slides({version: 'v1', auth}); const requests = [ { updateTextStyle: { objectId: shapeId, textRange: { type: 'FIXED_RANGE', startIndex: 0, endIndex: 5, }, style: { bold: true, italic: true, }, fields: 'bold,italic', }, }, { updateTextStyle: { objectId: shapeId, textRange: { type: 'FIXED_RANGE', startIndex: 5, endIndex: 10, }, style: { fontFamily: 'Times New Roman', fontSize: { magnitude: 14, unit: 'PT', }, foregroundColor: { opaqueColor: { rgbColor: { blue: 1.0, green: 0.0, red: 0.0, }, }, }, }, fields: 'foregroundColor,fontFamily,fontSize', }, }, { updateTextStyle: { objectId: shapeId, textRange: { type: 'FIXED_RANGE', startIndex: 10, endIndex: 15, }, style: { link: { url: 'www.example.com', }, }, fields: 'link', }, }, ]; // Execute the requests. try { const batchUpdateResponse = await service.presentations.batchUpdate({ presentationId, resource: { requests, }, }); console.log(`Updated the text style for shape with ID: ${shapeId}`); return batchUpdateResponse.data; } catch (err) { // TODO (developer) - Handle exceptions throw err; } }
PHP
<?php use Google\Client; use Google\Service\Drive; use Google\Service\Slides; use Google\Service\Slides\Request; use Google\Service\Slides\BatchUpdatePresentationRequest; function textStyleUpdate($presentationId, $shapeId) { /* Load pre-authorized user credentials from the environment. TODO(developer) - See https://developers.google.com/identity for guides on implementing OAuth2 for your application. */ $client = new Google\Client(); $client->useApplicationDefaultCredentials(); $client->addScope(Google\Service\Drive::DRIVE); $slidesService = new Google_Service_Slides($client); $requests = array(); $requests[] = new Google_Service_Slides_Request(array( 'updateTextStyle' => array( 'objectId' => $shapeId, 'textRange' => array( 'type' => 'FIXED_RANGE', 'startIndex' => 0, 'endIndex' => 5 ), 'style' => array( 'bold' => true, 'italic' => true ), 'fields' => 'bold,italic' ) )); $requests[] = new Google_Service_Slides_Request(array( 'updateTextStyle' => array( 'objectId' => $shapeId, 'textRange' => array( 'type' => 'FIXED_RANGE', 'startIndex' => 5, 'endIndex' => 10 ), 'style' => array( 'fontFamily' => 'Times New Roman', 'fontSize' => array( 'magnitude' => 14, 'unit' => 'PT' ), 'foregroundColor' => array( 'opaqueColor' => array( 'rgbColor' => array( 'blue' => 1.0, 'green' => 0.0, 'red' => 0.0 ) ) ) ), 'fields' => 'foregroundColor,fontFamily,fontSize' ) )); $requests[] = new Google_Service_Slides_Request(array( 'updateTextStyle' => array( 'objectId' => $shapeId, 'textRange' => array( 'type' => 'FIXED_RANGE', 'startIndex' => 10, 'endIndex' => 15 ), 'style' => array( 'link' => array( 'url' => 'www.example.com' ) ), 'fields' => 'link' ) )); // Execute the requests. $batchUpdateRequest = new Google_Service_Slides_BatchUpdatePresentationRequest(array( 'requests' => $requests )); $response = $slidesService->presentations->batchUpdate($presentationId, $batchUpdateRequest); printf("Updated the text style for shape with ID: %s", $shapeId); return $response; }
Питон
import google.auth from googleapiclient.discovery import build from googleapiclient.errors import HttpError def text_style_update(presentation_id, shape_id): """ create_sheets_chart the user has access to. Load pre-authorized user credentials from the environment. TODO(developer) - See https://developers.google.com/identity for guides on implementing OAuth2 for the application. """ creds, _ = google.auth.default() # pylint: disable=maybe-no-member try: service = build("slides", "v1", credentials=creds) # Update the text style so that the first 5 characters are bolded # and italicized, the next 5 are displayed in blue 14 pt Times # New Roman font, and the next 5 are hyperlinked. requests = [ { "updateTextStyle": { "objectId": shape_id, "textRange": { "type": "FIXED_RANGE", "startIndex": 0, "endIndex": 5, }, "style": {"bold": True, "italic": True}, "fields": "bold,italic", } }, { "updateTextStyle": { "objectId": shape_id, "textRange": { "type": "FIXED_RANGE", "startIndex": 5, "endIndex": 10, }, "style": { "fontFamily": "Times New Roman", "fontSize": {"magnitude": 14, "unit": "PT"}, "foregroundColor": { "opaqueColor": { "rgbColor": { "blue": 1.0, "green": 0.0, "red": 0.0, } } }, }, "fields": "foregroundColor,fontFamily,fontSize", } }, { "updateTextStyle": { "objectId": shape_id, "textRange": { "type": "FIXED_RANGE", "startIndex": 10, "endIndex": 15, }, "style": {"link": {"url": "www.example.com"}}, "fields": "link", } }, ] # Execute the requests. body = {"requests": requests} response = ( service.presentations() .batchUpdate(presentationId=presentation_id, body=body) .execute() ) print(f"Updated the text style for shape with ID:{shape_id}") return response except HttpError as error: print(f"An error occurred: {error}") return error if __name__ == "__main__": # Put the presentation_id, shape_id of slides # to be submitted. text_style_update( "10QnVUx1X2qHsL17WUidGpPh_SQhXYx40CgIxaKk8jU4", "MyTextBox_9" )
Руби
# Update the text style so that the first 5 characters are bolded # and italicized, the next 5 are displayed in blue 14 pt Times # New Roman font, and the next 5 are hyperlinked. requests = [] << { update_text_style: { object_id_prop: shape_id, text_range: { type: 'FIXED_RANGE', start_index: 0, end_index: 5 }, style: { bold: true, italic: true }, fields: 'bold,italic' } } << { update_text_style: { object_id_prop: shape_id, text_range: { type: 'FIXED_RANGE', start_index: 5, end_index: 10 }, style: { font_family: 'Times New Roman', font_size: { magnitude: 14, unit: 'PT' }, foreground_color: { opaque_color: { rgb_color: { blue: 1.0, green: 0.0, red: 0.0 } } } }, fields: 'foreground_color,font_family,font_size' } } << { update_text_style: { object_id_prop: shape_id, text_range: { type: 'FIXED_RANGE', start_index: 10, end_index: 15 }, style: { link: { url: 'www.example.com' } }, fields: 'link' } } # Execute the requests. req = Google::Apis::SlidesV1::BatchUpdatePresentationRequest.new(requests: requests) response = slides_service.batch_update_presentation(presentation_id, req) puts "Updated the text style for shape with ID: #{shape_id}"
Изменение форматирования абзаца
Форматирование абзацев определяет, как блоки текста отображаются в презентации, включая выравнивание, отступы и оформление списка.
На странице концепций «Структура и стилизация текста» описывается, как [[slides_api_short]] представляет информацию о стилизации абзацев.
API Slides поддерживает обновление стилей абзацев, преобразование простых абзацев в маркированные списки и удаление маркеров из абзацев.
Преобразование абзацев в список
Распространенной операцией форматирования абзацев является преобразование абзацев в маркированный список. В следующем примере все абзацы фигуры преобразуются в маркированный список, а также указывается используемый глиф маркера.
Скрипт приложений
/** * Add arrow-diamond-disc bullets to all text in the shape. */ function createBulletedText(presentationId, shapeId) { const requests = [{ createParagraphBullets: { objectId: shapeId, textRange: { type: 'ALL' }, bulletPreset: 'BULLET_ARROW_DIAMOND_DISC' } }]; // Execute the requests. try { const batchUpdateResponse = Slides.Presentations.batchUpdate({ requests: requests }, presentationId); console.log('Added bullets to text in shape with ID: %s', shapeId); return batchUpdateResponse; } catch (err) { // TODO (Developer) - Handle exception console.log('Failed with error: %s', err.error); } };
Идти
// Add arrow-diamond-disc bullets to all text in the shape. requests := []*slides.Request{{ CreateParagraphBullets: &slides.CreateParagraphBulletsRequest{ ObjectId: shapeId, TextRange: &slides.Range{ Type: "ALL", }, BulletPreset: "BULLET_ARROW_DIAMOND_DISC", }, }} // Execute the requests. body := &slides.BatchUpdatePresentationRequest{Requests: requests} response, _ := slidesService.Presentations.BatchUpdate(presentationId, body).Do() fmt.Printf("Added a linked Sheets chart with ID %s", shapeId)
Ява
import com.google.api.client.googleapis.json.GoogleJsonError; import com.google.api.client.googleapis.json.GoogleJsonResponseException; import com.google.api.client.http.HttpRequestInitializer; import com.google.api.client.http.javanet.NetHttpTransport; import com.google.api.client.json.gson.GsonFactory; import com.google.api.services.slides.v1.Slides; import com.google.api.services.slides.v1.SlidesScopes; import com.google.api.services.slides.v1.model.BatchUpdatePresentationRequest; import com.google.api.services.slides.v1.model.BatchUpdatePresentationResponse; import com.google.api.services.slides.v1.model.CreateParagraphBulletsRequest; import com.google.api.services.slides.v1.model.Range; import com.google.api.services.slides.v1.model.Request; import com.google.auth.http.HttpCredentialsAdapter; import com.google.auth.oauth2.GoogleCredentials; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.List; /* Class to demonstrate the use of Slide Create Bulleted Text API */ public class CreateBulletedText { /** * Add arrow-diamond-disc bullets to all text in the shape. * * @param presentationId - id of the presentation. * @param shapeId - id of the shape. * @return response * @throws IOException - if credentials file not found. */ public static BatchUpdatePresentationResponse createBulletedText(String presentationId, String shapeId) throws IOException { /* Load pre-authorized user credentials from the environment. TODO(developer) - See https://developers.google.com/identity for guides on implementing OAuth2 for your application. */ GoogleCredentials credentials = GoogleCredentials.getApplicationDefault() .createScoped(Collections.singleton(SlidesScopes.PRESENTATIONS)); HttpRequestInitializer requestInitializer = new HttpCredentialsAdapter( credentials); // Create the slides API client Slides service = new Slides.Builder(new NetHttpTransport(), GsonFactory.getDefaultInstance(), requestInitializer) .setApplicationName("Slides samples") .build(); // Add arrow-diamond-disc bullets to all text in the shape. List<Request> requests = new ArrayList<>(); requests.add(new Request() .setCreateParagraphBullets(new CreateParagraphBulletsRequest() .setObjectId(shapeId) .setTextRange(new Range() .setType("ALL")) .setBulletPreset("BULLET_ARROW_DIAMOND_DISC"))); BatchUpdatePresentationResponse response = null; try { // Execute the request. BatchUpdatePresentationRequest body = new BatchUpdatePresentationRequest().setRequests(requests); response = service.presentations().batchUpdate(presentationId, body).execute(); System.out.println("Added bullets to text in shape with ID: " + shapeId); } catch (GoogleJsonResponseException e) { // TODO(developer) - handle error appropriately GoogleJsonError error = e.getDetails(); if (error.getCode() == 400) { System.out.printf("Shape not found with id '%s'.\n", shapeId); } else if (error.getCode() == 404) { System.out.printf("Presentation not found with id '%s'.\n", presentationId); } else { throw e; } } return response; } }
JavaScript
function createBulletedText(presentationId, shapeId, callback) { // Add arrow-diamond-disc bullets to all text in the shape. const requests = [{ createParagraphBullets: { objectId: shapeId, textRange: { type: 'ALL', }, bulletPreset: 'BULLET_ARROW_DIAMOND_DISC', }, }]; // Execute the requests. try { gapi.client.slides.presentations.batchUpdate({ presentationId: presentationId, requests: requests, }).then((batchUpdateResponse) => { console.log(`Added bullets to text in shape with ID: ${shapeId}`); if (callback) callback(batchUpdateResponse.result); }); } catch (err) { document.getElementById('content').innerText = err.message; return; } }
Node.js
/** * Creates bulleted text for a presentation. * @param {string} presentationId The presentation ID. * @param {string} shapeId The shape ID to add bulleted text to. */ async function createBulletedText(presentationId, shapeId) { const {GoogleAuth} = require('google-auth-library'); const {google} = require('googleapis'); const auth = new GoogleAuth({ scopes: 'https://www.googleapis.com/auth/presentations', }); const service = google.slides({version: 'v1', auth}); // Add arrow-diamond-disc bullets to all text in the shape. const requests = [ { createParagraphBullets: { objectId: shapeId, textRange: { type: 'ALL', }, bulletPreset: 'BULLET_ARROW_DIAMOND_DISC', }, }, ]; // Execute the requests. try { const batchUpdateResponse = await service.presentations.batchUpdate({ presentationId, resource: { requests, }, }); console.log(`Added bullets to text in shape with ID: ${shapeId}`); return batchUpdateResponse.data; } catch (err) { // TODO (developer) - Handle exception throw err; } }
PHP
<?php use Google\Client; use Google\Service\Drive; use Google\Service\Slides; use Google\Service\Slides\Request; function createBulletedText($presentationId, $shapeId) { /* Load pre-authorized user credentials from the environment. TODO(developer) - See https://developers.google.com/identity for guides on implementing OAuth2 for your application. */ $client = new Google\Client(); $client->useApplicationDefaultCredentials(); $client->addScope(Google\Service\Drive::DRIVE); $slidesService = new Google_Service_Slides($client); // Add arrow-diamond-disc bullets to all text in the shape. $requests = array(); $requests[] = new Google_Service_Slides_Request(array( 'createParagraphBullets' => array( 'objectId' => $shapeId, 'textRange' => array( 'type' => 'ALL' ), 'bulletPreset' => 'BULLET_ARROW_DIAMOND_DISC' ) )); // Execute the request. $batchUpdateRequest = new Google_Service_Slides_BatchUpdatePresentationRequest(array( 'requests' => $requests )); $response = $slidesService->presentations->batchUpdate($presentationId, $batchUpdateRequest); printf("Added bullets to text in shape with ID: %s", $shapeId); return $response; }
Питон
import google.auth from googleapiclient.discovery import build from googleapiclient.errors import HttpError def create_bulleted_text(presentation_id, shape_id): """ Run create_bulleted_text the user has access to. Load pre-authorized user credentials from the environment. TODO(developer) - See https://developers.google.com/identity for guides on implementing OAuth2 for the application. """ creds, _ = google.auth.default() # pylint: disable=maybe-no-member try: slides_service = build("slides", "v1", credentials=creds) # Add arrow-diamond-disc bullets to all text in the shape. requests = [ { "createParagraphBullets": { "objectId": shape_id, "textRange": {"type": "ALL"}, "bulletPreset": "BULLET_ARROW_DIAMOND_DISC", } } ] # Execute the requests. body = {"requests": requests} response = ( slides_service.presentations() .batchUpdate(presentationId=presentation_id, body=body) .execute() ) print(f"Added bullets to text in shape with ID: {shape_id}") return response except HttpError as error: print(f"An error occurred: {error}") return error if __name__ == "__main__": # Put the presentation_id and shape_id # to be submitted. create_bulleted_text( "1VD1xmi1-9DonI4zmCKENTzlVxIL5SdGGTmbHmnBjQ1E", "MyTextBox_9" )
Руби
# Add arrow-diamond-disc bullets to all text in the shape. requests = [] << { create_paragraph_bullets: { object_id_prop: shape_id, text_range: { type: 'ALL' }, bulletPreset: 'BULLET_ARROW_DIAMOND_DISC' } } # Execute the requests. req = Google::Apis::SlidesV1::BatchUpdatePresentationRequest.new(requests: requests) response = slides_service.batch_update_presentation(presentation_id, req) puts "Added bullets to text in shape with ID: #{shape_id}"