Chỉnh sửa và tạo kiểu văn bản

Trang này hướng dẫn bạn cách chỉnh sửa và tạo kiểu văn bản trong bản trình bày bằng Trang trình bày API.

Giới thiệu về văn bản

Văn bản trong bản trình bày luôn nằm trong một hình dạng hoặc ô bảng. API này cho phép bạn sửa đổi văn bản này theo một số cách:

  • Bạn có thể chèn, xoá hoặc thay thế văn bản trong bản trình bày.
  • Bạn có thể thêm định dạng đoạn văn để tạo danh sách có dấu đầu dòng.
  • Bạn có thể thay đổi định dạng ký tự như in đậm, in nghiêng, màu sắc, kích thước phông chữ hoặc siêu liên kết.

Hãy xem trang khái niệm Cấu trúc và kiểu văn bản để biết thông tin tổng quan chung về cách hoạt động của việc tạo kiểu văn bản trong API Trang trình bày. Ngoài ra, hãy xem video ở trên để xem ví dụ hoàn chỉnh (Python) kết hợp một số khái niệm về định dạng trong các phần bên dưới.

Chèn, xoá hoặc thay thế văn bản

Có hai cách để thay thế văn bản trong bản trình bày bằng API Trang trình bày: bằng cách tìm kiếm và thay thế toàn cục hoặc bằng cách xoá và thêm văn bản một cách rõ ràng. Cả hai cách đều sử dụng phương thức batchUpdate, nhưng với các loại yêu cầu khác nhau.

Tìm và thay thế toàn cục

Sử dụng ReplaceAllTextRequest để tìm kiếm và thay thế toàn bộ trong bản trình bày.

Phần Hợp nhất văn bản trong hướng dẫn về việc Hợp nhất dữ liệu đưa ra ví dụ về cách bạn có thể sử dụng loại yêu cầu này.

Thay thế văn bản trong một hình dạng

API Trang trình bày cho phép bạn sửa đổi nội dung văn bản của một hình dạng. Bạn có thể xoá từng dải văn bản và chèn văn bản ở một vị trí cụ thể.

Sử dụng InsertTextRequestDeleteTextRequest để thực hiện các thao tác này.

Việc thay thế một vùng văn bản cụ thể bao gồm việc xoá rồi chèn. Bạn có thể thực hiện việc này bằng các bước sau:

  1. Xác định phần tử trang chứa văn bản.
  2. Xác định vị trí bắt đầu và kết thúc của văn bản cần thay thế.
  3. Gọi batchUpdate bằng hai yêu cầu sau:
    1. DeleteTextRequest, chỉ định phạm vi văn bản cần xoá.
    2. InsertTextRequest, chỉ định cùng một vị trí bắt đầu cũng như chuỗi văn bản cần chèn.

Để đảm bảo tính nguyên tử khi bạn thay thế văn bản theo cách này, hãy nhớ đưa cả hai yêu cầu vào cùng một lệnh gọi batchUpdate. Điều này được thể hiện trong ví dụ sau, trong đó thay thế tất cả văn bản trong một hình dạng bằng văn bản mới:

Apps Script

slides/api/Snippets.gs
/**
 * 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);
  }
};

Go

slides/snippets/presentations.go
// 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)

Java

slides/snippets/src/main/java/SimpleTextReplace.java
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

slides/snippets/slides_simple_text_replace.js
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

slides/snippets/slides_simple_text_replace.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

slides/snippets/src/SlidesSimpleTextReplace.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;
}

Python

slides/snippets/slides_simple_text_replace.py
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",
  )

Ruby

slides/snippets/lib/file_snippets.rb
# 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}"

Thay đổi định dạng ký tự

Định dạng ký tự xác định cách hiển thị các ký tự văn bản trong bản trình bày, bao gồm cả kiểu chữ, màu sắc và đường siêu liên kết.

Trang khái niệm Cấu trúc và kiểu văn bản mô tả cách API Trang trình bày thể hiện thông tin về kiểu văn bản.

Để thay đổi định dạng ký tự của văn bản, hãy sử dụng batchUpdate với UpdateTextStyleRequest. Bạn cần cung cấp mã nhận dạng của hình dạng hoặc ô bảng chứa văn bản, cũng như một Dải ô bao gồm các thông tin sau:

  • Chỉ định FIXED_RANGE, cùng với chỉ mục bắt đầu và kết thúc xác định phạm vi văn bản mà bạn muốn tạo kiểu.
  • Chỉ định FROM_START_INDEX, cùng với chỉ mục bắt đầu xác định đầu của phạm vi văn bản mà bạn muốn tạo kiểu.
  • Chỉ định ALL, không có chỉ mục, để tạo kiểu cho tất cả văn bản trong hình dạng mục tiêu.

Ví dụ sau thực hiện một số thao tác định kiểu văn bản trên văn bản chứa trong một hình dạng:

  • Đặt phông chữ của các ký tự 0-4 thành in đậm nghiêng.
  • Đặt màu của các ký tự từ 5 đến 9 thành phông chữ Times New Roman 14pt blue.
  • Siêu liên kết các ký tự 10-14 đến www.example.com.

Một cách đơn giản để thực hiện việc này là tạo danh sách yêu cầu, sau đó sử dụng một lệnh gọi batchUpdate:

Apps Script

slides/api/Snippets.gs
/**
 * 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);
  }
};

Go

slides/snippets/presentations.go
// 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)

Java

slides/snippets/src/main/java/TextStyleUpdate.java
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

slides/snippets/slides_text_style_update.js
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

slides/snippets/slides_text_style_update.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

slides/snippets/src/SlidesTextStyleUpdate.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;
}

Python

slides/snippets/slides_text_style_update.py
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"
  )

Ruby

slides/snippets/lib/file_snippets.rb
# 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}"

Thay đổi định dạng đoạn văn bản

Định dạng đoạn văn xác định cách các khối văn bản hiển thị trong bản trình bày, bao gồm cả căn chỉnh, thụt lề và trang trí danh sách.

Trang khái niệm Cấu trúc và kiểu văn bản mô tả cách [[slides_api_short]] thể hiện thông tin về kiểu đoạn văn.

API Trang trình bày hỗ trợ việc cập nhật kiểu đoạn văn, chuyển đổi các đoạn văn thuần tuý thành danh sách có dấu đầu dòng và xoá dấu đầu dòng khỏi các đoạn văn.

Chuyển đổi các đoạn văn bản thành danh sách

Một thao tác định dạng đoạn văn phổ biến là chuyển đổi các đoạn văn thành danh sách có dấu đầu dòng. Ví dụ sau đây chuyển đổi tất cả các đoạn văn bản của một hình thành danh sách có dấu đầu dòng và chỉ định một ký tự dấu đầu dòng rõ ràng để sử dụng.

Apps Script

slides/api/Snippets.gs
/**
 * 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);
  }
};

Go

slides/snippets/presentations.go
// 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)

Java

slides/snippets/src/main/java/CreateBulletedText.java
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

slides/snippets/slides_create_bulleted_text.js
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

slides/snippets/slides_create_bulleted_text.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

slides/snippets/src/SlidesCreateBulletedText.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;
}

Python

slides/snippets/slides_create_bulleted_text.py
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"
  )

Ruby

slides/snippets/lib/file_snippets.rb
# 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}"