2017-03-10 76 views
2

我是全新的,所以请裸露在我身边! 我有这个代码,用于限制所有单元格中的数据为5个字符。我喜欢它缩短了数据恢复到5个字符,如果你在把更多的是5。谷歌应用程序脚本不能正常工作

function onEdit(e) { 
 
    var limit = 5; 
 
    if(e.value.length > limit) { 
 
    e.range.setValue(e.value.substring(0, limit)); 
 
    } 
 
}

如果我点击运行按钮它显示一个错误。

TypeError:无法从undefined读取属性“value”。 (第3行,“代码”文件) 但它似乎工作正常。

我希望脚本只能在一定范围的单元格上工作。说C3:C100。所以我不得不参考工作表和单元格,所以将脚本改为这个。

function onEdit(e) { 
 
var sheet = SpreadsheetApp.getActiveSheet(); 
 
var range = sheet.getRange("C3:C100"); 
 
var limit = 5; 
 
    if(e.value.length > limit) { 
 
    e.range.setValue(e.value.substring(0, limit)); 
 
} 
 
}

这个脚本不会在任何细胞的正常工作,更何况是选择的。 任何人都可以帮助我吗?我错过了什么? 谢谢

回答

1

onEdit脚本是由电子表格中的任何编辑触发的。它在所谓的event object中“捕捉”编辑。事件对象可以作为参数传递给函数。在这种情况下,你会看到onEdit(e)或onEdit(event)作为函数名。该对象具有一些附加的参数:e.range(编辑的范围),e.value(编辑的值),e.source(执行编辑的电子表格)等。 现在,当您运行在脚本编辑器中的功能(通过点击播放按钮)电子表格中没有发生实际的编辑。因此不会创建事件对象,并且该对象的所有参数都将不确定。

如果你想“限制”脚本范围C3的范围:C100,您可以按如下改变脚本:

function onEdit(e) { 
var limit = 5; 
if (e.value.length > limit && e.range.rowStart > 2 && e.range.rowStart < 101 && e.range.columnStart == 3) { 
    e.range.setValue(e.value.substring(0, limit)); 
} 
} 

注意,目前该脚本将在每个标签/张工作在您的电子表格/工作簿中。如果您想进一步限制脚本仅在一张纸上工作(例如'Sheet1'),您可以尝试类似

function onEdit(e) { 
var limit = 5; 
if (e.source.getActiveSheet().getName() == 'Sheet1' && e.value.length > limit && e.range.rowStart > 2 && e.range.rowStart < 101 && e.range.columnStart == 3) { 
    e.range.setValue(e.value.substring(0, limit)); 
} 
} 
相关问题