スポンサーリンク

GASではんこ画像をメニューから挿入

スプレッドシートではんこ画像を、独自メニューから簡単に挿入をさせる方法です。

はんこ画像は、PNG画像で準備をしてください。

事前準備

はんこ画像をGoogleドライブへアップロード

以下の画像のように、はんこ画像をアップロードするフォルダを作成し、はんこ画像(PNG)をアップロードしてください。

スポンサーリンク

ソースコード

ソースコードは、はんこ画像を挿入したいスプレッドシートにコピペをして、「はんこ」フォルダのIDへ事前準備ではんこ画像をアップロードしたフォルダのIDを設定してください。

動的にメニューを表示するために、スプレッドシートへ「はんこ」シートを作成して非表示にしています。

/**
 * 「はんこ」フォルダのID
 */
const HANKO_FOLDER_ID = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";

/**
 * はんこ画像の挿入時のサイズ
 */
const HANKO_SIZE = 50;

/**
 * オフセット(X)
 */
const HANKO_OFFSET_X = 25;

/**
 * オフセット(Y)
 */
const HANKO_OFFSET_Y = 15;

/**
 * はんこ画像を挿入するファンクション
 */
const HANKO_FUNC = (function() {

  // 初期処理
  initHanko();

  let result = {};

  let hankoSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("はんこ");

  let hankoInfos = hankoSheet.getRange(3, 2, (hankoSheet.getLastRow() - 2), 3).getValues();

  hankoInfos.forEach(hanko => {
    
    if (hanko[0] == "" || hanko[1] == "" || hanko[2] == "") return;

    var id = hanko[2];

    result[`hanko_${hanko[0]}`] = function() {

      var blob = DriveApp.getFileById(id).getBlob();

      var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

      var tmpRow = sheet.getActiveRange().getRow();
      
      var tmpColumn = sheet.getActiveRange().getColumn();

      //sheet.insertImage(blob, tmpColumn, tmpRow);
      let hanko = sheet.insertImage(blob, tmpColumn, tmpRow, HANKO_OFFSET_X, HANKO_OFFSET_Y);
      Utilities.sleep(100);
      hanko.setHeight(HANKO_SIZE);
      hanko.setWidth(HANKO_SIZE);
    };
  });
  return result;
})();

/**
 * はんこ画像の情報を「はんこシート」にまとめて記載をする。
 */
function initHanko() {

  let hankoSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("はんこ");

  if (hankoSheet == null) {
    hankoSheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet();
    hankoSheet.setName("はんこ");
  }
  else {
    hankoSheet.clear();
  }

  if (hankoSheet.getMaxColumns() < 5) {
    hankoSheet.insertColumns(1, 5 - hankoSheet.getMaxColumns());
  }
  else if (5 < hankoSheet.getMaxColumns()) {
    hankoSheet.deleteColumns(1, hankoSheet.getMaxColumns() - 5);
  }
  hankoSheet.setColumnWidths(1, hankoSheet.getMaxColumns(), 100);

  let hankoFolder = DriveApp.getFolderById(HANKO_FOLDER_ID);

  let files = hankoFolder.getFilesByType("image/png");

  let hankoInfos = new Array();

  hankoInfos.push(["No", "名前", "ID"]);

  let no = 1;

  while(files.hasNext()) {

    var file = files.next();

    var name = file.getName().split('.')[0];

    var id = file.getId();

    hankoInfos.push([no, name, id]);

    no++;
  }

  if (hankoSheet.getMaxRows() < (hankoInfos.length + 5)) {
    hankoSheet.insertRows(1, (hankoInfos.length + 5) - hankoSheet.getMaxRows());
  }
  else if ((hankoInfos.length + 5) < hankoSheet.getMaxRows()) {
    hankoSheet.deleteRows((hankoInfos.length + 5), hankoSheet.getMaxRows() - (hankoInfos.length + 5));
  }
  hankoSheet.setRowHeights(1, hankoSheet.getMaxRows(), 21);

  hankoSheet.setColumnWidth(1, 10);
  hankoSheet.setColumnWidth(2, 25);
  hankoSheet.setColumnWidth(3, 120);
  hankoSheet.hideColumn(hankoSheet.getRange("D:D"));
  hankoSheet.setColumnWidth(5, 10);

  hankoSheet.getRange(1, 1, 1, 5).merge();
  hankoSheet.getRange(1, 1).setValue("はんこ情報");
  hankoSheet.getRange(1, 1).setVerticalAlignment("middle");
  hankoSheet.getRange(1, 1).setHorizontalAlignment("center");
  var textStyle = SpreadsheetApp.newTextStyle().setFontSize(14).build();
  hankoSheet.getRange(1, 1).setTextStyle(textStyle);

  hankoSheet.getRange(2, 2, hankoInfos.length, 3).setValues(hankoInfos);
  hankoSheet.getRange(2, 2, hankoInfos.length, 3).setBorder(true, true, true, true, true, true);
  hankoSheet.getRange(2, 2, 1, 3).setHorizontalAlignment("center");
  hankoSheet.getRange(2, 2, 1, 3).setVerticalAlignment("middle");

  if (!hankoSheet.isSheetHidden()) hankoSheet.hideSheet();
}

/**
 * メニューの設置
 */
function setMenu() {

  let hankoSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("はんこ");

  let hankoInfos = hankoSheet.getRange(3, 2, (hankoSheet.getLastRow() - 2), 3).getValues();

  let menu = [];

  hankoInfos.forEach(hanko => {
    
    if (hanko[0] == "" || hanko[1] == "" || hanko[2] == "") return;

    var name = hanko[1];

    var funcName = `HANKO_FUNC.hanko_${hanko[0]}`;

    menu.push({
      name: name,
      functionName: funcName
    });
  });

  SpreadsheetApp.getActiveSpreadsheet().addMenu('はんこ', menu);
}

トリガーの設定

トリガーで、スプレッドシートを起動時に「setMenu」が実行されるように設定をしてください。

スポンサーリンク
レンタルサーバー
おすすめの記事