如何修改Google Apps Script实现多列日志分表记录?
Google Sheets多列分表日志记录脚本修改方案
现有脚本可记录'Postcode Checker'工作表第4列的输入内容到'app_search_logs',需新增规则:记录该工作表第10、11、12、13、14列的输入内容到'PUB_search_logs'工作表。以下是修改后的完整可运行代码:
function onEdit(e) { if (!e) { throw new Error( 'Please do not run the onEdit(e) function in the script editor window. ' + 'It runs automatically when you hand edit the spreadsheet.' ); } logColumns_(e); } /** * Automatically logs changes in columnsToWatch in sheetsToWatch. * * @param {Object} e The onEdit() event object. */ function logColumns_(e) { // version 1.2, modified to support multi-rule logging if (!e.value) { return; } //////////////////////////////// // [START modifiable parameters] const parameters = [ { sheetsToWatch: /^(Postcode Checker)$/i, columnsToWatch: [4], changelogSheetName: 'app_search_logs', }, { sheetsToWatch: /^(Postcode Checker)$/i, columnsToWatch: [10, 11, 12, 13, 14], changelogSheetName: 'PUB_search_logs', }, ]; // [END modifiable parameters] //////////////////////////////// const sheet = e.range.getSheet(); const sheetName = sheet.getName(); // 遍历所有配置规则,匹配到的都执行日志记录 parameters.forEach(settings => { if (!sheetName.match(settings.sheetsToWatch) || !settings.columnsToWatch.includes(e.range.columnStart) || sheetName === settings.changelogSheetName) { return; } const columnLabel = sheet.getRange(sheet.getFrozenRows() || 1, e.range.columnStart).getValue(); const rowLabel = sheet.getRange(e.range.rowStart, sheet.getFrozenColumns() || 1).getValue(); const cellAddress = e.range.getA1Notation(); let changelogSheet = e.source.getSheetByName(settings.changelogSheetName); if (!changelogSheet) { changelogSheet = e.source .insertSheet(settings.changelogSheetName, e.source.getNumSheets()) .appendRow(['Timestamp', 'Sheet name', 'Cell address', 'Column label', 'Row label', 'Value entered']); changelogSheet.setFrozenRows(1); } // 补全日志行的所有字段,和表头对应 changelogSheet.appendRow([new Date(), sheetName, cellAddress, columnLabel, rowLabel, e.value]); }); }
关键修改说明
- 在
parameters数组中新增第二个配置对象,明确指定监听第10-14列,日志目标表为PUB_search_logs - 将原代码中仅匹配第一个规则的逻辑改为遍历所有配置,确保符合条件的列都会触发对应日志记录
- 修复了原代码
appendRow参数缺失的问题,现在日志行内容和表头字段完全对应,避免日志内容错位
内容的提问来源于stack exchange,提问作者James 'Mook' Pite
相关产品推荐
相关产品推荐

