2017-08-18 9 views
0

あなたはすべてうまくいきたいと考えています。シート内の列の編集をトリガし、値に応じてユーザー定義セルの値を上書きするGoogleスプレッドシートスクリプト

私の同僚には規律のビットが不足しているので、私は私のオフィスのためにこの素敵なスクリプトを書こうとしています。

このスクリプトは、シート内の列が編集されている場合にトリガーする必要がありますが、シート編集またはスプレッドシート編集でもトリガーすると問題ありません。このスクリプトは、そのシートのその列の値を調べ、それらのいずれかに文字列「保留(i)」、「保留(ii)」または「保留(iii)」がある場合、別の列のセル(ユーザーによって選択される)は、文字列 "TBC"で上書きされます。私はgoogleからこれを継ぎだしてみたが、以下は私が得たものだが、私がここにいるので、明らかにhahaは動作しない。どんな助けでも大歓迎です!! :((

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

私はスプレッドシートが編集されたが、動作していないようならば

+0

なぜあなたはフォーマットされていない投稿されfuncitonののonEditを命名する機能のトリガーになるだろうことをどこかにGoogleでお読みください。他の人のコードを理解するのは難しいですが、どうして難しいのですか?また、Javaの質問タグはなぜですか?質問を編集しました。Javaタグを削除しました。 –

+0

謝罪、私は過去3日間コードのビットを混乱させてきたので、経験はないし、GoogleのコーディングがベースになっているのでJavaタグがそこにあったJava、または私は信じて:)助けてくれてありがとう、非常に感謝! – CristianCapsuna

+0

私はオフィスについて知りませんが、少なくともif文からカウンタを移動します;)そして、列の量が固定されている場合はforループを使用します。 –

答えて

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; 
} 
関連する問題