【GAS】Google Apps Script 活用事例 ファイル名が連番の画像を、順序通りスライドに一括挿入するスクリプト
こちらの記事がとても参考になりました。
こちらの記事で紹介されているスクリプトに少し手を入れて、
下記のようにドライブに保存されている画像を1, 2, 3, 4と昇順で挿入するスクリプトを書いてみました。
ちなみにファイル名の連番は、I love PDFというPDFからJPGに変換してくれるサービスの利用時に割り当てられたものです。リネームにスクリプトを使用していません。
しかし、while文を使うと順不同で画像が挿入されてしまう.....。
そこで、一旦ファイルIDを配列に保存し、2次元配列をsortして昇順に並び変える。そしてmapでファイルIDを一つずつ取り出して、画像を挿入します。
スクリプトはこんな感じです。
function myFunction() {
const folder = DriveApp.getFolderById('***************');
const files = folder.getFiles();
const values = [];
let count = 0;
let string = '';
while(files.hasNext()){
const file = files.next();
if(file.getMimeType().match(/^image\/(?:jpeg|gif|png)$/i)) {
values.push([file.getName(), file.getId()]);
count += 1;
}
}
//連番通りにファイルIDを格納した2次元配列を作成する。
values.sort(compareValues_);
console.log(values);
//['fileName', 'fileId']
//row[1] fileIdのみを取り出す
const presentation = SlidesApp.getActivePresentation();
values.map(row => addImageSlide_(presentation, DriveApp.getFileById(row[1]).getBlob()));
//挿入件数を表示させる
string += `<p>画像 ${count} 件を、挿入しました。</p>`;
console.log(string);
console.log(`${count} 件`);
const html = HtmlService.createHtmlOutput(string)
.setWidth(450)
.setHeight(300);
SlidesApp.getUi().showModelessDialog(html, 'htmlを表示するよ');
}
/**
* 2次元配列をsortする
*
*/
function compareValues_(a, b) {
return a < b ? -1:1;
}
/**
* 1スライドにつき1枚の画像を挿入する。
* @param {object} presentation
* @param {object} image
*
*/
function addImageSlide_(presentation, imageBlob) {
const slide = presentation.appendSlide(SlidesApp.PredefinedLayout.BLANK);
const image = slide.insertImage(imageBlob);
const imageWidth = image.getWidth();
const imageHeight = image.getHeight();
const pageWidth = presentation.getPageWidth();
const pageHeight = presentation.getPageHeight();
const newX = (pageWidth / 2) - (imageWidth / 2);
const newY = (pageHeight / 2) - (imageHeight / 2);
image.setLeft(newX).setTop(newY); //画像中央揃え
}
下記の三項演算子は、説明出来るほど理解して使用しているわけではないので、週末などに空き時間を使って、勉強しようかなと思っています。
function compareValues_(a, b) {
return a < b ? -1:1;
}
こんな記事も書いています。
この記事が気に入ったらサポートをしてみませんか?