当用户误删除单元格时,我有以下代码尝试设置查找公式:
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] ==“”评估的单元格设置为成为公式而不是整个范围?
谢谢!
答案 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]);
}
}}