現在(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, '各スライドの画像が作成されました。');
}