3
1

More than 1 year has passed since last update.

【GAS】 スライドをページ毎に画像(PNG, JPG, SVG)として一括出力

Last updated at Posted at 2021-10-17

現在(2021年10月)のところGoogleスライドで作成したスライドを画像形式でダウンロードする際、
各スライドを1つずつ出力するしかないようなので一括で出力できるGASを作った。

スクリプトはほぼ以下のサイトを参照しているので、オリジナリティはない。
【GAS】Google Apps Script 活用事例 Google Slidesの全てのスライドをJPGに変換するスクリプト

参考サイトからの変更点

  • コンテナバインドスクリプトにし、スプレッドシート上でスライドのURLとファイル形式を指定
  • スライドが置いてあるフォルダ内にスライド名と同名のフォルダを作成し、そこへ出力した画像を保存

スクリプト

スプレッドシート込みのファイルはここからコピーをダウンロード

function onOpen() {
 SpreadsheetApp.getUi()
  .createMenu('SlideToImage')
  .addItem('作成', 'createPresentationFile')
  .addToUi();
}

function createPresentationFile() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const url = sheet.getRange(2, 1, 1, 1).getValue();
  const presentation = SlidesApp.openByUrl(url);
  const presentationId = presentation.getId();
  const slides = presentation.getSlides();
  const format = sheet.getRange(3, 2, 1, 1).getValue();
  const folder = DriveApp.getFileById(presentationId).getParents().next().createFolder(presentation.getName());
  let slidesNumber = 1;

  for(const slide of slides){
    const page_id = slide.getObjectId();
    convertPresentation_(presentationId, page_id, format, slidesNumber, folder);
    slidesNumber += 1;
  }
  showDialog_(folder);
}

function convertPresentation_(presentation_id, page_id, format, slidesNumber, folder) {
  let ext = format;
  switch (format) {
   case "png":
   case "svg":
     break;
   case "jpg":
     format = "jpeg";
     ext    = "jpg";
     break;
   default:
     format = "pptx";
     ext    = "pptx"
     break;
 }
  const url = "https://docs.google.com/presentation/d/" + presentation_id + "/export/" + format + "?id=" + presentation_id + "&pageid=" + page_id;
  const options = {
    method: "get",
    headers: {"Authorization": "Bearer " + ScriptApp.getOAuthToken()},
    muteHttpExceptions: true
  };

  const response = UrlFetchApp.fetch(url, options);
  if (response.getResponseCode() === 200) {
   const presentation = SlidesApp.openById(presentation_id);
   return folder.createFile(response.getBlob()).setName(presentation.getName() + '_' + slidesNumber + '.' + ext);
 }
}

function showDialog_(folder) {
 const ui = SpreadsheetApp.getUi();

 const url  = "https://drive.google.com/drive/folders/" + folder.getId(); 
 const html = HtmlService
 .createHtmlOutput(
   `<p><a href=${url} target="_blank">Google Driveのフォルダはこちら</a></p>`
 )
 .setWidth(450)
 .setHeight(100); 
 ui.showModelessDialog(html, '各スライドの画像が作成されました。');

}
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1