所以,我尝试使用onEdit()事件编写一个脚本,它基本上会删除重复的链接(从技术上讲,它会删除所有内容,并且只会放回不重复的内容) 。
我的代码一直很好,直到它回写非重复的时间。即,我使用range.setValues()的行。我知道它需要一组要编辑的单元格数组,并且所述数组需要适合该范围。
到目前为止,我有:
if (unique)
{
newData.push(editedRow[0]);
Browser.msgBox(newData);
}
Unique是我使用的变量,如果找到了确切的条目,则为false。使用msgBox命令,我可以验证newData是否包含它需要包含的内容。再往下,我有:
newDataFinal = [newData];
Browser.msgBox('Put values '+newDataFinal+' in range ' +range.getA1Notation());
range.setValues(newDataFinal);
据我所知,这应该使NewDataFinal成为一个数组数组,我可以验证是否将setValues()更改为setValue(),它在电子表格中写[[22.0,13.0,23.0]](对于我的例子) ,对我来说,它看起来像一个数组。
范围也应该匹配,因为在这个例子中,我得到了一个提示,即"将值22,13,23放在范围B2:B4"来自msgBox,这似乎是一个合适的范围。 那么,我做错了什么?
这里是剩下的代码(请原谅评论/ msgboxes的丰富性和缺乏优雅,优先考虑是让它发挥作用,我可以优化它并在之后清理一堆):
function onEdit(e)
{
var range = e.range;
var values = range.getValues();
var sheet = SpreadsheetApp.getActiveSheet();
if (sheet.getName() != 'testiranje') return;
newData = new Array();
// Browser.msgBox(range.getA1Notation());
range.clear();
var data = sheet.getDataRange().getValues();
var counter = 0;
for (editedRowIndex in values)
{
unique = true;
editedRow = values[editedRowIndex];
// Browser.msgBox('Edited Row ' +editedRow);
for(i in data)
{
var row = data[i];
// Browser.msgBox('Old Row '+row);
for (j in row)
{
// Browser.msgBox(row[j] + ' vs ' + editedRow[0])
if (editedRow[0] == row[j])
{
Browser.msgBox('Hit! '+editedRow[0]);
unique = false;
}
}
}
if (unique)
{
// Browser.msgBox('Pushing '+editedRow[0]+' in newdata');
newData.push(editedRow[0]);
Browser.msgBox(newData);
}
}
newDataFinal = [newData];
Browser.msgBox('Put values '+newDataFinal+' in range ' +range.getA1Notation());
range.setValues(newDataFinal);
// range.setNote('SCIENCE');
}
答案 0 :(得分:0)
我没有测试您的代码,因为我不想为它创建工作表,但我可以建议(无论如何应该解决此问题)是替换您的range.setValues(newDataFinal);
有了这个:
sheet.getRange(range.getRowIndex(),range.getColumnIndex(),newDataFinal.length,newDataFinal[0].length).setValues(newDataFinal);
如果您想知道为什么范围和数组不合适,您可以使用此代码:
(我使用浏览器,因为你似乎喜欢它......我更喜欢Logger.log)
Browser.msgBox('data height = '+newDataFinal.length+', data width = '+newDataFinal[0].length+' and range height is '+range.getHeight()+', range width is '+range.getWidth()+' ... does it fit ?');
注意:我几乎可以肯定你的初始范围比newData数组要大,因为你从初始数据中删除了元素......我最好的猜测就是那些高度不会超过&#39适合。 (但这只是猜测;-)因为你没有提到你得到的错误信息......)
答案 1 :(得分:0)
问题是您无法更改onEdit处理程序中的单元格。看文档。而是安装自己的onEditCustom处理程序。