Google表格应用脚本设置公式/值onEdit

时间:2018-10-30 22:56:12

标签: google-apps-script google-sheets

当用户误删除单元格时,我有以下代码尝试设置查找公式:

function onEdit(e)

{
  var ssA = SpreadsheetApp.getActive();
  var ss = ssA.getSheetByName("Completed Work Requests") 
  var lastRow = ss.getLastRow();
  var range = ss.getRange(5,6,lastRow,1);
  var data = range.getValues();


 for(var i=0;i<data.length;i++)
  {  
    if(data[i][0] == "")//If true then it's blank
    {
      data[i][0]="=IFERROR(INDEX('Client lookup sheet'!C[-1]:C[-1],MATCH(R[0]C[-4],'Client lookup sheet'!C[-5]:C[-5],false)),\"\")"
      range.setValue(data[i][0]);
    }
  }}

我遇到的问题是range.setValue(data [i] [0]);我可以看到它正在将整个范围设置为上一行中data [i] [0]的值。问题是,即使用户手动输入了值,onEdit函数也只是将值重置为data [i] [0] = ....而我希望他们能够设置手动值而不用覆盖函数。值。

所以我的问题归结为我需要使用什么而不是range.setValue(data [i] [0])来确保仅将由data [i] [0] ==“”评估的单元格设置为成为公式而不是整个范围?

谢谢!

1 个答案:

答案 0 :(得分:1)

我通过将代码修改为

来解决问题

edit:先前的问题是,当找到data [i] [0] ==“”的实例时,我不知道一种设置值的方法。上面问题中的原始代码将setValue应用于整个范围,因此当用户手动输入值时,setValue会将值简单地重置为公式。我发现我可以使用getRange(i + 5,6)找到data [i] [0]的范围,因为该行从5开始,列号=6。然后可以使用此新范围将setValue设置为适当的值。单元格而不是整个范围

function onEdit(e)

{
  var ssA = SpreadsheetApp.getActive();//changed from openById() for my convenience
  var ss = ssA.getSheetByName("Completed Work Requests") 
  var lastRow = ss.getLastRow();
  var range = ss.getRange(5,6,lastRow,1);
  var data = range.getValues();


 for(var i=0;i<data.length;i++)
  {  
    if(data[i][0] == "")//If true then it's blank
    {
      data[i][0]="=IFERROR(INDEX('Client lookup sheet'!C[-1]:C[-1],MATCH(R[0]C[-4],'Client lookup sheet'!C[-5]:C[-5],false)),\"\")"
      var rangedata = ss.getRange(i+5,6)
      rangedata.setValue(data[i][0]);
    }
  }}