実現したいこと
ここに実現したいことを箇条書きで書いてください。
・Googleドライブ内に保存された画像ファイルをスプレッドシートに展開したい
・画像は10枚ずつ列方向に並べ、1行下に画像のリンクを展開したい
・リンクの下に次の10枚を展開し、フォルダ内の画像をすべて展開するまで処理を繰り返したい
・処理はB2セルから開始したい
前提
Googleドライブ内にはサブフォルダがあるため、全てのサブフォルダを探索し処理するようにしています。
また、画像ファイルの拡張子がHEICのものが混ざっているためそれを除去するようスクリプトを組んでいます。
発生している問題・エラーメッセージ
エラーメッセージは出ていないものの、画像ファイルが表示されていません。
IMAGE関数や画像ファイルのリンクは出力されているので、スクリプトそのものは問題なく動作しているようです。
該当のソースコード
function insertImagesFromDrive() { var folderId = 'YOUR_FOLDER_ID'; // GoogleドライブのフォルダIDを指定してください。 var folder = DriveApp.getFolderById(folderId); var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var startRow = 2; // B2セルから開始します var startColumn = 2; // B列から開始します var imagesPerRow = 11; // B2から始まり一行に10枚の画像を配置します processFolder(folder, sheet, startRow, startColumn, imagesPerRow); } function processFolder(folder, sheet, startRow, startColumn, imagesPerRow) { var files = folder.getFiles(); while (files.hasNext()) { var file = files.next(); var fileName = file.getName(); if (fileName.match(/\.(jpg|jpeg|png|gif)$/i)) { // 画像ファイルのみを処理します var fileUrl = file.getUrl(); // ファイルのURLを取得します var imageFormula = '=IMAGE("' + fileUrl + '")'; // IMAGE関数を作成します sheet.getRange(startRow, startColumn).setFormula(imageFormula); // IMAGE関数をセルに挿入します sheet.getRange(startRow + 1, startColumn).setValue(fileUrl); // 画像のURLを次の行に挿入します startColumn++; if (startColumn > imagesPerRow) { startRow += 3; // 画像とURLを展開する行を1行下に移動します startColumn = 2; // 列をB列にリセットします } } } var subfolders = folder.getFolders(); while (subfolders.hasNext()) { var subfolder = subfolders.next(); processFolder(subfolder, sheet, startRow, startColumn, imagesPerRow); // 再帰的にサブフォルダを処理します } }
試したこと
セルの大きさが干渉しているのかと思い調整したりしましたが、それでも画像が表示されず、
検索している中でドライブリンクからIMAGE関数で直接画像を表示できない旨発見したのですが、
解決方法がわからずでして、お力添えいただけますと幸いです。

回答1件
あなたの回答
tips
プレビュー