2017-12-27 7 views
0

以下の2つのコードが行う以下:組み合わせ2つのonEdit機能

第一コード:(変更履歴)という名前の変更ログシートは、私のチームと呼ばれるシートでのGoogleスプレッドシートの各セルにない変化を追跡するために作成します(シート1)。

第2コード:セルが更新されないようにします。ユーザーがシート上のセル(changeLog)を編集すると、ヘルパーシート上の同じセルに対してチェックされます。ヘルパーシートの値が空の場合は、新しい値が両方のシートに保存されます。ヘルパーシートの値が空でない場合は、マスターシートのセルにコピーされ、変更を効果的に元に戻しますすでにchangeLogシートの1番目のコードで入力されています)

質問:これらのコードは両方ともonEdit関数ですが、どのように連携させることができますか?

(詩プロジェクト・トリガーはすでにのonEditするように設定され、各機能は、独自で取り組んでいる)

第一コード:

function onEdit() { 
    // This script records changes to the spreadsheet on a "Changelog" sheet. 
    // The changelog includes these columns: 
    // "Timestamp", "Sheet name", "Cell address", "Column label", "Row label", "Value entered" 

    var sheetsToWatch = ['Sheet1', 'add more']; 
    // name of the sheet where the changelog is stored 
    var changelogSheetName = "Changelog"; 

    var timestamp = new Date(); 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getActiveSheet(); 
    var cell = sheet.getActiveCell(); 
    var sheetName = sheet.getName(); 

    // if it is the changelog sheet that is being edited, do not record the change 
    if (sheetName == changelogSheetName) return; 

    // if the sheet name does not appear in sheetsToWatch, do not record the change 
    var matchFound = false; 
    for (var i = 0; i < sheetsToWatch.length; i++) { 
    if (sheetName.match(sheetsToWatch[i])) matchFound = true; 
    } 
    if (!matchFound) return; 

    var columnLabel = sheet.getRange(/* row 3 */ 3, cell.getColumn()).getValue(); 
    var rowLabel = sheet.getRange(cell.getRow(), /* column B */ 2).getValue(); 

    var changelogSheet = ss.getSheetByName(changelogSheetName); 
    if (!changelogSheet) { 
    // no changelog sheet found, create it as the last sheet in the spreadsheet 
    changelogSheet = ss.insertSheet(changelogSheetName, ss.getNumSheets()); 
    // Utilities.sleep(2000); // give time for the new sheet to render before going back 
    // ss.setActiveSheet(sheet); 
    changelogSheet.appendRow(["Email","Timestamp", "Sheet name", "Cell address", "Column label", "Row label", "Value entered"]); 
    changelogSheet.setFrozenRows(1); 
    } 
    changelogSheet.appendRow([Session.getActiveUser().getEmail(), timestamp, sheetName, cell.getA1Notation(), columnLabel, rowLabel, cell.getValue()]); 
} 

第二コード:

function onEdit() { 


    var masterSheetName = "Changelog" // sheet where the cells are protected from updates 
    var helperSheetName = "Helper" // sheet where the values are copied for later checking 
    var firstDataRow = 1; // only take into account edits on or below this row 
    var firstDataColumn = 1; // only take into account edits on or to the right of this column 

    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var masterSheet = ss.getActiveSheet(); 
    if (masterSheet.getName() != masterSheetName) return; 

    var masterCell = masterSheet.getActiveCell(); 
    if (masterCell.getRow() < firstDataRow || masterCell.getColumn() < firstDataColumn) return; 

    var helperSheet = ss.getSheetByName(helperSheetName); 
    var helperCell = helperSheet.getRange(masterCell.getA1Notation()); 
    var newValue = masterCell.getValue(); 
    var oldValue = helperCell.getValue(); 

    if (oldValue == "") { 
    helperCell.setValue(newValue); 
    } else { 
    masterCell.setValue(oldValue); 
    } 
} 

答えて

1

名前変更あなたの2つの関数と、1つのonEditを作る:

function onEdit() 
{ 
    onEdit1(); // run 1-st 
    onEdit2(); // run 2-nd 
} 
関連する問題