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」が実行されるように設定をしてください。