如何在Google表格中将Changelog变更日志的最新条目展示在顶部
解决方案
你只需将代码末尾追加行的逻辑替换为在表头下方插入新行的逻辑,即可实现最新变更记录放在顶部,具体修改如下:
核心改动点
删除原代码最后一行的appendRow语句,替换为插入行+赋值的逻辑:
// 在第1行表头下方插入1行空行 changelogSheet.insertRowBefore(2); // 给新插入的第2行填充变更数据 changelogSheet.getRange(2, 1, 1, 7).setValues([[timestamp, currentSheetName, cell.getA1Notation(), typeChange, previousValue, newValue, user]]);
完整修改后代码
function myFunction1(e) { var changelogSheetName = "Changelog"; var ss = SpreadsheetApp.getActiveSpreadsheet(); var cell = SpreadsheetApp.getActiveRange(); var timestamp = new Date(); var currentSheet = ss.getActiveSheet(); var currentSheetName = currentSheet.getName(); var previousValue = e.oldValue; var newValue = cell.getValue(); var typeChange = "编辑"; // 如果编辑的是Changelog表本身,不记录避免循环触发 if (currentSheetName == changelogSheetName) return; var changelogSheet = ss.getSheetByName(changelogSheetName); if (changelogSheet == null) { // 不存在Changelog表时自动创建 changelogSheet = ss.insertSheet(changelogSheetName, ss.getNumSheets()); Utilities.sleep(2000); ss.setActiveSheet(currentSheet); changelogSheet.getRange('A1:G1').setBackground('#E0E0E0'); changelogSheet.appendRow(["操作时间", "工作表", "单元格", "操作类型", "旧值", "新值", "操作用户"]); changelogSheet.deleteColumns(8,19); changelogSheet.setFrozenRows(1); changelogSheet.setColumnWidth(1, 170); changelogSheet.setColumnWidth(7, 170); changelogSheet.protect(); } var user = Session.getEffectiveUser().getEmail(); if (previousValue == null){ typeChange = "新增"; } else if (newValue == "") { typeChange = "删除"; } // 替换原来的appendRow逻辑,最新记录插在表头下方 changelogSheet.insertRowBefore(2); changelogSheet.getRange(2, 1, 1, 7).setValues([[timestamp, currentSheetName, cell.getA1Notation(), typeChange, previousValue, newValue, user]]); }
修改后所有新产生的变更记录都会直接插入到表头下方的第一位,无需滚动即可直接查看最新内容,历史记录会自动向下顺延,不会丢失。
内容的提问来源于stack exchange,提问作者user17069850
相关产品推荐
相关产品推荐

