見出し画像

【GAS】Google Apps Script 活用事例 対象シートのセル内にDrive内の画像を挿入するスクリプト

セル内に画像を挿入

シートに画像を延々と挿入する退屈な作業を自動化したので、そのスクリプトを備忘録として残しておこうと思います。

画像は、I love PDFを使用して、PDFをJPGに変換したものを使用しています。

スクリプト全文


/**
* 対象シートのセル内に画像を挿入するスクリプト
* 
*/
function setImageInnerCell() {
 const folder = DriveApp.getFolderById('********************');
 const files  = folder.getFiles();
 const values = [];

 let count  = 0;
 let string = '';

 //jpg、gif、pngを取得してシートの最終行に挿入する
 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'] 画像の名前、ファイルID
//row[1] fileIdのみを取り出す
 const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート名'); 
 values.map(row => addImageSheet_(sheet, DriveApp.getFileById(row[1]).getBlob(), row[0]));

 //挿入件数を表示させる
 string += `<p>画像 ${count} 件を、挿入しました。</p>`;

 console.log(string);
 console.log(`${count} 件`);

 const html = HtmlService.createHtmlOutput(string)
 .setWidth(450)
 .setHeight(300);

 SpreadsheetApp.getUi().showModelessDialog(html, 'htmlを表示するよ');

}


/**
* 2次元配列をsortする
* 詳しくは、(三項) 演算子で検索
* 
*/
function compareValues_(a, b) {
 return a < b ? -1:1;
}


/**
* 最終行に1枚の画像を挿入する。
* @param {Object} presentation
* @param {Object} image
* 
*/
function addImageSheet_(sheet, imageBlob, fileName) {
  const contentType = imageBlob.getContentType();
  const base64      = Utilities.base64Encode(imageBlob.getBytes());
  const imageStr    = "data:" + contentType + ";base64, " + base64;

  const image = SpreadsheetApp.newCellImage()
  .setSourceUrl(imageStr)
  .setAltTextTitle(fileName)
  .setAltTextDescription("-")
  .build();

  const lastRow = sheet.getLastRow() + 1;
  console.log(`最終行:${lastRow}`);
  
  //最終行かつ2列目に画像を挿入する
  sheet.getRange(lastRow,2).setValue(image);
}

条件 (三項) 演算子

画像をGoogle Slidesに挿入する場合

今回、こちらの記事を参考にしました


この記事が気に入ったらサポートをしてみませんか?