google-sheetsgoogle-apps-script

when onedit used in apps scrips have a popup appear so users know its running


At the moment i have the following script that runs automatically when cell D2 is edited

My issue is that it takes 6-8 seconds to run but staff do not know if is running

am i able to have a popup come up when it starts saying "running script" like it does if you assign the script to a button?

function onEdit(e) { var sheet = e.source.getSheetByName("Input1"); if (sheet && e.range.getA1Notation() === "D2") { searchData(); } }

function searchData() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var inputSheet = ss.getSheetByName("Input1");
  var dataSheet = ss.getSheetByName("Job Sheet");

  var jobnumber = inputSheet.getRange("D2").getValue();

  // Check if Job number field is empty
  if (!jobnumber) {
    SpreadsheetApp.getUi().alert('Enter a Job number.');
    return;
  }

  var dataRange = dataSheet.getDataRange().getValues();
  var found = false;

  for (var i = 0; i < dataRange.length; i++) {
    if (dataRange[i][0] == jobnumber) {
      found = true;
      inputSheet.getRange("D4").setValue(dataRange[i][1]);
      inputSheet.getRange("D6").setValue(dataRange[i][2]);
      inputSheet.getRange("D8").setValue(dataRange[i][3]);
      inputSheet.getRange("D10").setValue(dataRange[i][4]);
      inputSheet.getRange("D12").setValue(dataRange[i][5]);
      inputSheet.getRange("D14").setValue(dataRange[i][6]);
      inputSheet.getRange("D16").setValue(dataRange[i][7]);
      inputSheet.getRange("D18").setValue(dataRange[i][8]);
      inputSheet.getRange("D20").setValue(dataRange[i][9]);
      inputSheet.getRange("D22").setValue(dataRange[i][10]);
      inputSheet.getRange("D24").setValue(dataRange[i][11]);
      inputSheet.getRange("D26").setValue(dataRange[i][13]);
      inputSheet.getRange("D28").setValue(dataRange[i][14]);
      inputSheet.getRange("D30").setValue(dataRange[i][15]);
      inputSheet.getRange("A34").setValue(jobnumber);
      break;
    }
  }

  if (!found) {
    SpreadsheetApp.getUi().alert('Job number not found.');
  }
}

Solution

  • Maybe you can use "toast" that runs a small box in the bottom right corner. You can set these parameters:

    toast(msg, title, timeoutSeconds) 
    

    Like this:

    SpreadsheetApp.getActive().toast("Please wait 10 seconds","The process is running",10)
    

    You can't set it to wait until the process is finished, but the user will know it's done.


    Other option is to use a cell as a reference for the user. In the beginning of the code, you can write something like:

    inputSheet.getRange("H1").setValue("Process Running").setBackground("yellow")
    

    And at the end of searchData:

    inputSheet.getRange("H1").setValue("Process Finished").setBackground("green")