星期四, 2月 05, 2026

[GAS] Slide 合併資料

Slide 常見應用場景,在一個範本 Slide 上設定多個 {{文字說明}} 符號,並從 Google Sheet 內抓取資料後,根據實務需求取代 {{文字說明}},該筆記以課程結業證書為例筆記

Slide 範本

gs Code

把 [課程結業證書範本 Slide] 複製至新位置,該筆記是以根目錄內的日期資料夾 (EX:2026-02-05) 去,並把學員資料透過 replaceAllText() 更新至 Slide {{文字說明}}

{{文字說明}} 基本上在 Slide 內是唯一的識別文字就行,前後有沒有符號包起來不是重點,但既然官方教學都使用 {{}} 包起來,就延續該風格囉,Slide 內有三個文字說明,分別為 {{學員姓名}}、{{課程名稱}}、{{日期}}

replaceAllText(findText, replaceText) 函式
  • findText:以該筆記為例,是指 {{文字說明}}
  • replaceText:取代 {{文字說明}} 的內容
function SlideMergeData() {

  const presentation = SlidesApp.getActivePresentation();
  const timeZone = Session.getScriptTimeZone();
  const dateString = Utilities.formatDate(new Date(), timeZone, "yyyy-MM-dd");

  // 設定根 FolderID
  const rootFolderId = GetFolderID();
  const rootFolder = DriveApp.getFolderById(rootFolderId);

  // 檢查並刪除同名的日期資料夾
  const existingFolders = rootFolder.getFoldersByName(dateString);
  while (existingFolders.hasNext()) {
    const oldFolder = existingFolders.next();
    oldFolder.setTrashed(true); // 將舊資料夾移至垃圾桶
  }

  // 建立日期資料夾
  const dateFolder = rootFolder.createFolder(dateString);

  // 複製範本 Slide 來使用
  const templateFile = DriveApp.getFileById(presentation.getId());
  const studentName = "王小強";
  const copyFile = templateFile.makeCopy(studentName, dateFolder);

  // 開啟新 Slide 並進行文字替換
  const newPresentation = SlidesApp.openById(copyFile.getId());
  newPresentation.replaceAllText('{{學員姓名}}', studentName);
  newPresentation.replaceAllText('{{課程名稱}}', "Google Apps Script");
  newPresentation.replaceAllText('{{日期}}', dateString);
  newPresentation.saveAndClose();
}

執行結果

該筆記只有使用 replaceAllText() 取代文字,還有兩個主題分別為
  1. replaceAllShapesWithImage 取代圖片
  2. BatchUpdate:有效能考量使用,需要開啟 Google Drive API 服務
目前沒有使用到,單純紀錄

沒有留言:

張貼留言