繁体   English   中英

在第一次编辑脚本运行后锁定单元格的值,并且不为其他编辑更新单元格值

[英]Lock the value of a cell after first edit script running and don't update the cell value for other edits

我有一个脚本,每次有人编辑 Col3 或 Col16 时,它都会自动填充 Google 电子表格上的单元格。

我的问题:

如果有人编辑或修改 Col3 中的值,自动单元格中的时间戳将更新,而我想保留这些单元格中的第一个值,即第一次编辑 Col 3 时的生成日期。

我的脚本:

function onEdit(event) {
  // assumes source data in sheet named Elisa-Miriam-Victor-Hanane-Sarah-Apoorva-Carlino
  // target sheet of move to named Archive
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();

  // Fill automatically Columns Q and R when PO number is provided in Column P.
  // In Q: generates the date of when the PO is mentioned; in R: it generates the PO folder name
  var sh=event.range.getSheet();
  var namesA=["Miriam","Elisa","Hanane","Sarah","Apoorva","Victor","Carlino"];
if(namesA.indexOf(sh.getName())!=-1 && event.range.columnStart==16) { // when PO 1 N° is filled
     event.range.offset(0,1).setValue(new Date()).setNumberFormat("yyyy-MM-dd");
     event.range.offset(0,2).setFormula(Utilities.formatString('=CONCATENATE(TEXT(Q%s;"yyyy-MM-dd");" - ";P%s)',event.range.rowStart,event.range.rowStart,event.range.rowStart));
   }         

if(namesA.indexOf(sh.getName())!=-1 && event.range.columnStart==3) { // when client is mentioned in Col 3
  event.range.offset(0,9).setFormula(Utilities.formatString('=IFERROR(vlookup(E%s;IMPORTRANGE("https://docs.google.com/spreadsheets/d/1zN99rXMltbMfD_OS22NxZApgvabTG-eRv7FOIS7pBvk/edit#gid=1560028291";"Treatment!A:E");2;false);"")',event.range.rowStart,event.range.rowStart,event.range.rowStart));
     event.range.offset(0,31).setValue(new Date()).setNumberFormat("yyyy-MM-dd HH:mm:ss");
   }
  }

有谁知道如何锁定日期的第一个生成值?

谢谢您的帮助,

您可以在为其分配值之前检查单元格是否为空:

function onEdit(event) {
     ...
     var offsetRange = event.range.offset(0,31);
     if(offsetRange.isBlank()){
       offsetRange.setValue(new Date()).setNumberFormat("yyyy-MM-dd HH:mm:ss");
    }
   }
  }

仅保存第一次

function saveFirstTimeOnly(key,value) {
  const ps=PropertiesService.getScriptProperties();
  var obj=ps.getProperties();
  if(!obj.hasOwnProperty(key)) {
    ps.setProperty(key, value);    
  }
}

您可以使用任何东西作为密钥。 可能就像“SheetName”+“RangeInA1Notation”一样,您可能必须为此使用可安装的触发器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM