The requirement is to be able to click on a button, have it launch a function and then be otherwise unclickable until that function has concluded. This is my first attempt.
So have a sheet called "tester". On it is a big green button Drawing with the word "Button" on the front. This is assigned to the _Button function.
We have a function called SwapDrawingOnActions
which is defined as follows (in TypeScript):
function SwapDrawingOnActions(sheet:GoogleAppsScript.Spreadsheet.Sheet|string, actionToFind:string, actionToReplaceWith:string) : boolean {
let replaced = false;
if ("string" === typeof sheet) {
sheet = SpreadsheetApp.getActive().getSheetByName(sheet);
}
const drawings = sheet.getDrawings();
for (var i = 0; i < drawings.length; i++) {
const drawing = drawings[i];
if (drawing.getOnAction() === actionToFind) {
drawing.setOnAction(actionToReplaceWith);
replaced = true;
break;
}
}
return replaced;
}
We have two demonstration functions, _Button()
and _PleaseWait()
function _Button() {
Browser.msgBox("Okay, we're about to do something important right now.");
SwapDrawingOnActions("tester","_Button", "_PleaseWait");
}
function _PleaseWait() {
Browser.msgBox("Sorry, we're doing something important right now.");
SwapDrawingOnActions("tester", "_PleaseWait", "_Button");
}
So on the first invocation, a msgBox appears and the OnAction of the button is set to _PleaseWait
. On the second invocation, the OnAction is changed back to _Button
.
The OnAction does actually get changed, viz
I expect that there are other ways of doing this. Tanaike does one and it's amazing.
Top comments (0)