我可能遇到了很大的挑战: 跟踪数据变化并记录评论'在其他电子表格中使用Apps脚本在主电子表格中制作。
我有一个data spreadsheet,其中包含数据集的行。 对于此主页中的每个数据行,存在另一个历史记录表(例如history – First name spreadsheet)。这些历史记录应该(1)跟踪数据变化和(2)记录评论'对应的行。
例如
(1)如果有人更改data spreadsheet中第2行的值,应用脚本应在第2行和第3行之间的相应电子表格中插入一行(在本例中为history – First name spreadsheet)(&# 39; s总是在这两行之间)并添加第4,6或7行中的信息。
(2)如果有人输入评论'在F列的其中一行中的data spreadsheet中,App Script再次应在第2行和第3行之间的相应电子表格中插入一行,并在history – First name spreadsheet中添加第3行或第5行中的注释。最后但并非最不重要的是删除数据电子表格中的评论。
我搜索了很多,但没有找到任何有用的东西。 不幸的是,我不是程序员。 任何帮助将不胜感激!
祝福, 亚历
答案 0 :(得分:0)
我在Apps脚本中使用onEdit()事件做了类似的事情。您可以更改它以添加用户注释,然后再附加到另一个工作表。
function appendLine() {
var sessionEmail = Session.getActiveUser().getEmail().toString();
var spreadsheetTimeZone = SpreadsheetApp.getActive().getSpreadsheetTimeZone();
var lastUpdatedString = Utilities.formatDate(new Date(), spreadsheetTimeZone, "MM/dd/yyyy' 'HH:mm:ss");
var s = SpreadsheetApp.getActiveSheet();
if (s.getName() == "Workload") { //checks that we're on the correct sheet
var r = s.getActiveCell();
if (r.getColumn() == 14) { //checks the column
var status = r.getValue();
var note = r.offset(0, -1);
var noteValue = note.getValue()
var delivery = r.offset(0, -5);
var deliveryValue = delivery.getValue().toString();
}
// Validating fields are filled in
if (status == "Complete") {
var ui = SpreadsheetApp.getUi();
if (noteValue == '') { // if no note is entered, stop script with message box
var noStatus = ui.alert(
'Warning!',
'Please enter notation before choosing Complete.',
ui.ButtonSet.OK);
r.setValue('')
return;
}
// get array values
var array = [lastUpdatedString, sessionEmail, deliveryValue, noteValue]
// insert at row 2 of destination, so newest note is always at the top and found in the index(match())
var ss = SpreadsheetApp.getActiveSpreadsheet();
var pasteSheet = ss.getSheetByName("Historical Notes Sheet");
var lock = LockService.getScriptLock();
lock.waitLock(30000);
try {
var index = 2;
pasteSheet.insertRowBefore(index).getRange(index, 1, 1, array.length).setValues([array]);
SpreadsheetApp.flush();
} finally {
lock.releaseLock();
}
// clear response row
note.setValue('')
r.setValue('')
}
}
}