如何修复并整合Google Apps Script实现Google Sheets数据日志自动追加
Google Sheets 操作历史记录脚本整合方案
需求:当Source工作表的A5:F5区域单元格发生变更时,将该区域的数据追加到History工作表中。
问题:现有三个可独立运行的脚本(负责复制数据的copyRowsWithCopyTo、触发操作的onEdit、追加数据的append),无法整合使用,且原onEdit函数存在逻辑问题。
原独立脚本
copyRowsWithCopyTo(复制数据)
function copyRowsWithCopyTo() { let spreadSheet = SpreadsheetApp.getActiveSpreadsheet(); let sourceSheet = spreadSheet.getSheetByName('Source'); let sourceRange = sourceSheet.getDataRange(); let targetSheet = spreadSheet.getSheetByName('History'); sourceRange.copyTo(targetSheet.getRange(1, 1)); }
原onEdit(触发操作)
function onEdit(e) { var range = e.range; var spreadSheet = e.source; var sheetName = spreadSheet.getActiveSheet().getName(); var column = range.getColumn(); var row = range.getRow(); var inputValue = e.value; if ( e.source.getSheetName() == 'Source' && e.range.columnStart == 1 && e.range.columnEnd == 6 && e.range.rowStart >= 5 && e.range.rowEnd <= 5 ) }
原append(追加数据)
function append() { const ss = SpreadsheetApp.getActiveSpreadsheet(); // Collect the data const sourceSheet = ss.getSheetByName('Source'); const sourceRange = sourceSheet.getRange('A5:F5'); const sourceVals = sourceRange.getValues().flat(); //Append the data const destinationSheet = ss.getSheetByName('History'); destinationSheet.appendRow(sourceVals); }
正确整合后的onEdit脚本
function onEdit(e) { var range = e.range; var sheet = range.getSheet(); if (sheet.getName() == 'Source' && range.getRow() >= 5 && range.getRow() <= 5 && range.getColumn() >= 1 && range.getColumn() <= 6) { var values = sheet.getRange("A5:F5").getValues()[0]; var historySheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('History'); historySheet.appendRow(values); } }
该脚本将触发条件判断与数据追加逻辑合并,当检测到Source工作表的A5:F5区域内任意单元格被编辑时,自动读取该区域整行数据并追加到History工作表的末尾,无需单独调用其他脚本即可完成需求。
内容的提问来源于stack exchange,提问作者BoB
相关产品推荐
相关产品推荐

