当特定单元格的值更改时,如何自动将数据添加到另一个工作表?

时间:2019-06-22 15:59:23

标签: google-apps-script google-sheets

我有一张介绍不同产品价格的表格。这些价格经常更新,我很想找到一个解决方案,每当我更改单元格B2上的日期时,产品的日期和价格就会自动记录在另一个名为“存档”的标签中的列中。

定价标签

enter image description here

存档文件

enter image description here

我发现有几个脚本会根据特定值(例如“完成”或“已完成”)自动将值记录在不同的工作表中,但是我不确定当目标值总是变化时(例如单元格)如何适应这些脚本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自动记录价格值。如果有一个更简单的解决方案,非常欢迎!预先感谢。

1 个答案:

答案 0 :(得分:1)

  • 根据您的问题,在共享电子表格中,Current Pricing表中的日期单元格“ B2”更改后,您要将“ B2:B”的值复制到列表的最后一列Archive的页面。

如果我的理解是正确的,那么该修改如何?请认为这只是几个答案之一。

在此修改中,我通过简单触发器的事件对象使用了以下流程。

  1. 编辑单元格后,将运行onEdit()的简单触发器。
  2. 运行onEdit()时,工作表名称,编辑的单元格和值分别为sheetNameToWatchdateCell和更新时,表单中“ 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;处会发生错误。请注意这一点。

参考文献:

如果我误解了您的问题,而这不是您想要的结果,我深表歉意。