我有一张介绍不同产品价格的表格。这些价格经常更新,我很想找到一个解决方案,每当我更改单元格B2上的日期时,产品的日期和价格就会自动记录在另一个名为“存档”的标签中的列中。
定价标签
存档文件
我发现有几个脚本会根据特定值(例如“完成”或“已完成”)自动将值记录在不同的工作表中,但是我不确定当目标值总是变化时(例如单元格)如何适应这些脚本B2)。
其中一个脚本是:
function onEdit() {
var sheetNameToWatch = "Pricing";
var columnNumberToWatch = 2;
var valueToWatch = "[Unclear what the value should be]";
var sheetNameToMoveTheRowTo = "Archive";
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getActiveCell();
if (sheet.getName() == sheetNameToWatch && range.getColumn() == columnNumberToWatch && range.getValue() == valueToWatch) {
var targetSheet = ss.getSheetByName(sheetNameToMoveTheRowTo);
var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
sheet.getRange(range.getRow(), 1, 1, sheet.getLastColumn()).moveTo(targetRange);
sheet.deleteRow(range.getRow());
}
}
完整的工作表可以在这里找到:https://docs.google.com/spreadsheets/d/13UAx8ANRkvLcLZ7Pxj4INigQatFpv8F2NF6AVuRSPb8/edit?usp=sharing
理想的输出将是一个脚本,该脚本可以根据单元格B2自动记录价格值。如果有一个更简单的解决方案,非常欢迎!预先感谢。
答案 0 :(得分:1)
Current Pricing
表中的日期单元格“ B2”更改后,您要将“ B2:B”的值复制到列表的最后一列Archive
的页面。如果我的理解是正确的,那么该修改如何?请认为这只是几个答案之一。
在此修改中,我通过简单触发器的事件对象使用了以下流程。
onEdit()
的简单触发器。onEdit()
时,工作表名称,编辑的单元格和值分别为sheetNameToWatch
,dateCell
和更新时,表单中“ B2:B”的值sheetNameToWatch
表被复制到archiveSheet
表的最后一列。使用此脚本时,请设置脚本顶部的变量。
function onEdit(e) {
var archiveSheet = "Archive"; // Please set this.
var sheetNameToWatch = "Current Pricing"; // Please set this.
var dateCell = "B2"; // Please set this.
var range = e.range;
var sheet = range.getSheet();
var value = Number(e.value);
if (
sheet.getSheetName() == sheetNameToWatch &&
range.getA1Notation() == dateCell &&
Number(e.oldValue) != value
) {
var srcRange = sheet.getRange(2, 2, sheet.getLastRow() - 1, 1);
var dstSheet = e.source.getSheetByName(archiveSheet);
var dstRange = dstSheet.getRange(2, dstSheet.getLastColumn() + 1);
srcRange.copyTo(dstRange);
}
}
sheetNameToWatch
的“ B2”单元格(“当前定价”)。这样,脚本将由OnEdit事件触发器自动运行。
onEdit()
,则由于使用了事件对象,因此在var range = e.range;
处会发生错误。请注意这一点。如果我误解了您的问题,而这不是您想要的结果,我深表歉意。