手がこみ過ぎている感がありますが、最初に思いついた方法を実装してみました。
14枚のうちから1枚をランダムに選択するので二日連続で同じになってしまう可能性があり、まだ改良が必要の予知があります…。
準備
スプレッドシート「シート1」のA1~A14に =IMAGE("http://xxxx")
の形式で画像を14種類用意しておきます。
※この場合、画像をアップロードする必要があるため以下手順でURLを取得します
- 画像をGoogleドライブにアップロードする
- 「ファイル右クリック > 共有可能なリンクを取得」でリンクを取得
- リンクから画像を開き、「右クリック > 画像アドレスをコピー」で画像のURLを取得
- 上記を画像14枚分行う
プログラム実行
以下コードを実行すると「シート2」のA1に、画像14種類のうちいずれか1枚が表示されます。
(同日に実行した場合、同じ画像が表示されます)
/**
* "シート1"のA1~A14に =IMAGE() 関数で画像を14種類用意しておく
* "シート2"のA1にランダムにA1~A14のいずれかの画像をランダムに表示する
*/
function main(){
// 乱数を発生させる
var randomNumber = makeRandomNumber(new Date());
// 表示する画像を変更する
var sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート1");
var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート2");
var imageFormula = sheet1.getRange(randomNumber, 1).getFormula();
sheet2.getRange("A1").setFormula(imageFormula);
}
function makeRandomNumber(date) {
// 日付を年月日文字列に変換
var dateStr = Utilities.formatDate(date, "JST", "yyyyMMdd")
// 乱数が生成済の場合それを使用する
var scriptProperties = PropertiesService.getScriptProperties();
var property = scriptProperties.getProperty(dateStr);
if (property != null) {
return property;
}
// 1~14 の範囲で乱数生成
var min = 1, max = 14;
var randomNumber = Math.floor( Math.random() * (max + 1 - min) ) + min;
// 乱数を登録する
scriptProperties.deleteAllProperties();
scriptProperties.setProperty(dateStr, randomNumber)
return randomNumber;
}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。