首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在第一次编辑脚本运行后锁定单元格的值,而不更新其他编辑的单元格值

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

Stack Overflow用户
提问于 2020-05-19 14:23:50
回答 2查看 96关注 0票数 0

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

我的问题是:

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

我的剧本:

代码语言:javascript
复制
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");
   }
  }

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

谢谢你的帮助,

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-19 15:21:27

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

代码语言:javascript
复制
function onEdit(event) {
     ...
     var offsetRange = event.range.offset(0,31);
     if(offsetRange.isBlank()){
       offsetRange.setValue(new Date()).setNumberFormat("yyyy-MM-dd HH:mm:ss");
    }
   }
  }
票数 1
EN

Stack Overflow用户

发布于 2020-05-19 16:47:50

只保存第一次

代码语言:javascript
复制
function saveFirstTimeOnly(key,value) {
  const ps=PropertiesService.getScriptProperties();
  var obj=ps.getProperties();
  if(!obj.hasOwnProperty(key)) {
    ps.setProperty(key, value);    
  }
}

你可以用任何东西来做钥匙。就像'SheetName‘+ 'RangeInA1Notation’一样,您可能不得不使用一个可安装的触发器来完成这个任务。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61893454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档