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