フリーのだいたいWeb屋の技術系メモ
最近AIが好き
仕事じゃないスクリプト書きはとても楽しい

GASでinsertImageした画像のサイズを変更すると画像が消える

2024年1月5日  2024年1月5日 

スプレッドシートにGASで画像を追加したい

使っていた在庫管理システムが有料になったので、CSVデータを元にゆるゆるとスプレッドシートで在庫管理システムを作成している

商品数が多いので画像もあるといいよね、ということで画像データの入力機能をつけてみた


insertImage

insertImageはセル内に画像を挿入ではなく、セル上に画像を挿入になる

  // 対象となるセルの行番号と列番号を指定

var rowNumber = 1; // 1行目 var columnNumber = 1; // A列 //アクティブなシートを取得 var mySheet = SpreadsheetApp.getActiveSheet(); //取得した画像をアクティブなシートに挿入 var image = mySheet.insertImage(URL, columnNumber, rowNumber);

ここまでは問題ない

setHeight, setWidth

セル内に収まるようにサイズをセルの幅に合わせてサイズ調整をしたい

insertImage時にサイズ変更を同時に実行すると画像が表示されない
  //取得した画像をアクティブなシートに挿入し、
  //サイズを調整する
  var image = mySheet.insertImage(URL, columnNumber, rowNumber)
   .setWidth(mySheet.getColumnWidth(columnNumber))
   .setHeight(mySheet.getRowHeight(rowNumber)); 

ブラウザを再読み込みすると表示される

どうもおかしい気がしたので再読み込みしてみると、今まで試した全ての画像がリサイズされてスプレッドシート上に表示されたいた
描画ミスっぽいので、強制的に再描画させてみる
  //スプレッドシートに対する保留中の変更をすべて適用する
  SpreadsheetApp.flush();

まだ表示されない

StackOverflowで同じ症状の人を発見

手動でシートを切り替えると表示されるので、パターン1を実装
  //アクティブなスプレッドシートを取得
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  //描画し直し
  //シートを切り替えると表示されるので、シートを切り替え、flushし
  //元のシートを再度表示させる
  ss.getSheetByName("別のシート").activate();
  SpreadsheetApp.flush();
  mySheet.activate();

完成

予め画像を挿入するシートとは別のシートを作成しておく
  // 対象となるセルの行番号と列番号を指定
  var rowNumber = 1; // 1行目
  var columnNumber = 1; // A列

  //アクティブなシートを取得
  var mySheet = SpreadsheetApp.getActiveSheet();
  //取得した画像をアクティブなシートに挿入
  var image = mySheet.insertImage(URL, columnNumber, rowNumber)
   .setWidth(mySheet.getColumnWidth(columnNumber))
   .setHeight(mySheet.getRowHeight(rowNumber)); 
   
   //アクティブなスプレッドシートを取得
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  //描画し直し
  //シートを切り替えると表示されるので、シートを切り替え、flushし
  //元のシートを再度表示させる
  ss.getSheetByName("別のシート").activate();
  SpreadsheetApp.flush();
  mySheet.activate();

ー記事をシェアするー
B!
タグ
人気の投稿