gpt4 book ai didi

google-apps-script - 如何在特定单元格的值更改时自动将数据添加到另一个工作表?

转载 作者:行者123 更新时间:2023-12-04 15:43:50 35 4
gpt4 key购买 nike

我有一张包含不同产品定价的表格。这些价格更新非常频繁,我很想找到一个解决方案,每当我更改单元格 B2 上的日期时,产品的日期和价格都会自动记录在不同选项卡(称为存档)的列中。

定价标签

enter image description here
(来源:imggmi.com)

归档文件

enter image description here
(来源:imggmi.com)

我发现了几个脚本可以根据特定值(例如“完成”或“已完成”)自动将值记录在不同的工作表中,但我不确定如何在目标值始终变化时调整这些脚本(即单元格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 自动记录定值(value)的脚本。如果有更简单的解决方案,非常欢迎!提前致谢。

最佳答案

  • 根据您的问题,在共享电子表格中,当 Current Pricing 工作表中“B2”的日期单元格发生更改时,您希望将“B2:B”的值复制到Archive 工作表的最后一列。

如果我的理解是正确的,这个修改怎么样?请将此视为几个答案之一。

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

  1. 编辑单元格时,onEdit() 的简单触发器会运行。
  2. 运行onEdit()时,工作表名称、编辑单元格和值分别为sheetNameToWatchdateCell和更新,sheetNameToWatch 工作表中“B2:B”的值被复制到 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;会出错,因为使用了事件对象。请注意这一点。

引用资料:

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

关于google-apps-script - 如何在特定单元格的值更改时自动将数据添加到另一个工作表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56716969/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com