Google apps script 在特定日期更新单元格并锁定数据

Google apps script 在特定日期更新单元格并锁定数据,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我想知道是否有一种方法可以为以下内容创建函数。我试图用D3中的值更新一个单元格,比如说G3,但我想在某个日期进行更新。我想让那个单元格在那个日期更新,然后用值锁定 例如,如果D3的值为30,我希望我的G3单元格在2012年12月10日更新为30。在那个日期之后,我希望这个值被锁定,因为D3中的数据会随着时间的推移而改变。这个公式将需要复制,因为我试图找到一个每周的趋势细节 任何帮助都将不胜感激,提前感谢 如果您不介意在中执行此操作,您可以通过以下方式轻松实现。具体来说,使用可以使函数在特定日期运

我想知道是否有一种方法可以为以下内容创建函数。我试图用D3中的值更新一个单元格,比如说G3,但我想在某个日期进行更新。我想让那个单元格在那个日期更新,然后用值锁定

例如,如果D3的值为30,我希望我的G3单元格在2012年12月10日更新为30。在那个日期之后,我希望这个值被锁定,因为D3中的数据会随着时间的推移而改变。这个公式将需要复制,因为我试图找到一个每周的趋势细节


任何帮助都将不胜感激,提前感谢

如果您不介意在中执行此操作,您可以通过以下方式轻松实现。具体来说,使用可以使函数在特定日期运行。要做到这一点,首先必须创建触发器。如前所述,您可以从脚本编辑器手动执行此操作。您也可以通过运行创建此类触发器的函数来实现这一点。在这种情况下,功能是:

function createTrigger() {
  ScriptApp.newTrigger("setAndLock")
  .timeBased()
  .atDate(2012, 12, 10)
  .create();
}
运行此函数将创建一个触发器,该触发器将在日期
2012/12/10
触发名为
setAndLock
的函数,该函数应将值从
D3
复制到
G3
,并保护最后一个单元格。这样的函数可以类似于此函数:

function setAndLock() {
  var sheet = SpreadsheetApp.getActiveSheet();
  // Copying the value from D3 to G3:
  var origin = sheet.getRange("D3").getValue();
  var dest = sheet.getRange("G3");
  dest.setValue(origin);
  // Protecting G3:
  var protection = dest.protect();
  var me = Session.getEffectiveUser();
  protection.addEditor(me);
  protection.removeEditors(protection.getEditors());
  if (protection.canDomainEdit()) {
    protection.setDomainEdit(false);
  }
}
请注意,如上所述,当前用户或电子表格所有者无法锁定单元格


我希望这能有所帮助。

这是用公式做不到的。您可以测试日期并仅在该日期更新值。但不能使用公式将其自身替换为动态接收的永久值。但是,如果VBA是您的一个选项,则可以使用VBA完成此操作。最好使用Excel宏查看答案。如果你想使用一个公式:
=If(TODAY()=“10/12/2012”,做这个,做那个)
。这个公式将在一年内有效。@DavidGarcíaBodego为什么OP会在Google Sheets函数中使用Excel宏?我没有注意到。。。