谷歌应用程序脚本无法正常工作

时间:2017-03-10 11:13:55

标签: javascript google-sheets

我有这个代码,用于将所有单元格中的数据限制为5个字符。我喜欢它将数据缩短为5个字符,如果你把5个字符放入其中。



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




如果单击“运行”按钮,则会显示错误。

TypeError:无法读取属性"值"来自undefined。 (第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 个答案:

答案 0 :(得分:1)

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

如果要将脚本范围“限制”到C3:C100范围,可以按如下方式更改脚本:

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));
}
}

请注意,目前该脚本适用于电子表格/工作簿中的每个标签/表格。如果您想进一步限制脚本只能处理一个工作表(例如'Sheet1'),您可以尝试类似

的内容
int expected_value=86;
int numerical_value=0;
List<WebElement> lists = driver.findElements(By.cssSelector("span.ndocs"));

  for (int i = 0; i < lists.size(); ) {
            String trimmed_value = lists.get(i).getText();
            trimmed_value = lists.get(i).getText().trim().substring(trimmed_value.indexOf("(") + 1);
            trimmed_value = lists.get(i).getText().trim().substring(0, trimmed_value.indexOf(")"));
            System.out.println(trimmed_value);
            numerical_value =numerical_value+Integer.parseInt(trimmed_value);
            i++;
        }
assertEquals(expected_value, numerical_value);