簡體   English   中英

Google電子表格腳本,該腳本會在工作表中的列的編輯時觸發,並根據值覆蓋用戶定義的單元格的值

[英]A google spreadsheet script that triggers on edit of a column in a sheet and overwrites the value of a user defined cell or not depending on the value

希望你一切都好。

我正在嘗試為我的辦公室寫一個不錯的腳本,因為我的同事缺乏紀律。

最好在工作表中的一列被編輯時觸發該腳本,但是如果它在工作表編輯或什至在電子表格編輯時觸發就可以。 該腳本應查看該工作表該列中的值,如果其中任何一個具有字符串“ On hold(i)”,“ On hold(ii)”或“ On hold(iii)”,則另一列上的單元格(由用戶選擇)在同一行上,應使用字符串“ TBC”覆蓋。 我試圖從谷歌和下面這是我所得到的,但是由於我在這里,顯然不起作用哈哈。 任何幫助將不勝感激 !! :((

function OnEdit() {
    var a=1;
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    while ( a<200 ){
        if ( ss.getSheetByName('Active Jobs').getRange(a,12) == "On hold (i)" ) {
            ss.getSheetByName('Active Jobs').getRange(a,15).setValues("TBC");
            a=a+1;
        }
    }
}

我在Google上的某個地方讀到,如果對電子表格進行了編輯,則命名功能OnEdit將使函數觸發,但似乎不起作用。

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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM