谷歌电子表格脚本,在编辑工作表中的列时触发,并根据值覆盖用户定义单元格的值或不覆盖用户定义单元格的值

时间:2017-08-18 14:31:52

标签: javascript google-sheets

希望你们一切顺利。

我正在尝试为我的办公室写这个漂亮的脚本,因为我的同事缺乏一点纪律。

如果工作表中的列已被编辑,则应触发此脚本,但如果它在工作表编辑时触发,或者甚至可能在电子表格编辑中触发,则会触发该脚本。此脚本应查看该表中该列的值,以及其中是否有任何字符串"保持(i)","保持(ii)"或"暂停(iii)"然后应该用字符串" TBC"覆盖同一行上另一列(由用户选择)上的单元格。我尝试从谷歌和下面拼接这是我得到的,但因为我在这里显然不工作哈哈。任何帮助将不胜感激 !! :((

BorderLayout

我在google上的某个地方读到,如果电子表格已被编辑,那么命名函数OnEdit会使函数触发但它似乎无法正常工作。

1 个答案:

答案 0 :(得分:0)

function OnEdit() {
   var a=1;
   var ss = SpreadsheetApp.getActiveSpreadsheet();
  var activeSheet = ss.getActiveSheet();
  var activeCell = activeSheet.getActiveCell();

  //Check if the sheet is a JOb sheet and the cell us the status cell
  if (activeSheet.getName().indexOf("Job ID") != -1 && activeCell.getRow() == 2 && activeCell.getColumn() == 15){
    var switchValue = activeCell.getValue();
    switch (switchValue){
      case "On hold (i)":
      case "On hold (ii)": 
      case "On hold (iii)":
      case "To be assigned":
        //Write date to active jobs sheet
        addDateToActive("TBC");
        break;
      case "In progress":
        var newDate = Browser.inputBox("Please enter report out date");
        addDateToActive(newDate);
        break;
      default:
        Browser.msgBox("GOTHERE");
    }
  }
}
function addDateToActive(input){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var activeSheet = ss.getActiveSheet();
  var activeCell = activeSheet.getActiveCell();
  var jobid = activeSheet.getRange(2,1).getValue().toString();
  var activeJobSheet = ss.getSheetByName("Active Jobs");
  var activeJobs = activeJobSheet.getRange(1,1,activeJobSheet.getLastRow(),1).getValues();
  activeJobs = ColumnToArray(activeJobs);
  var jobrow = activeJobs.indexOf(jobid)+1;
  if (jobrow == -1){
    Browser.msgBox("Job Id not preent on Active Jobs sheet");
  }else{
    activeJobSheet.getRange(jobrow,15).setValue(input);
  }
}

function ColumnToArray(columnData){
  //Ensure that the data supplied is a column
  if(columnData[0].length == 1){
    //Convert column to array
    var dataout = [];
    for (var a = 0; a < columnData.length; a++){
      dataout.push(columnData[a][0]);
    }
  }else{
    throw new Error("Data Supplied to ColumnToArray was not a simple Column");
  }
  return dataout;
}