OnEdit,用选定的值替换输入的文本

时间:2016-05-12 01:37:16

标签: google-apps-script google-sheets

我正在尝试在Google工作表中添加自定义功能(第一次这样做),但我正在努力让代码正常工作。我现在在我的工作表脚本中有这个:

function onEdit(e) {
  var range = e.range
  if (range.value >= 0 && range.value <= 4 ) {
    range.setValue(['○', '◔', '◑', '◕', '●'][n]);
  }
}

但在第2行上出现错误,说明了这一点:

TypeError: Cannot read property "range" from undefined. (line 2, file "Code")

我似乎无法想出这个......

1 个答案:

答案 0 :(得分:1)

基本功能

这是从列表中获取符号的自定义函数:

function getSymbol(n) {
  var Symbols = ['○', '◔', '◑', '◕', '●'];
    if (n >=0 && n <=4) {
      return Symbols[n];
    }

    return 'not found';

}

使用公式

但有更快的方法:使用公式。 添加新工作表'符号'并粘贴:

A  B
0  ○
1  ◔
2  ◑
3  ◕
4  ●

然后使用公式:

 = vlookup(A2, Symbols!$A:$B, 2, 0)

OnEdit代码

如果您希望代码在输入值[0-4]时将符号填充到单元格中,请使用以下代码:

function onEdit(e) {
    var mySheetName = "Sheet1"; // change to yours
    var myRangeAddress = "F15:F52"; // change to yours

    var SS = SpreadsheetApp.getActiveSpreadsheet();
    var ss = SS.getActiveSheet();
    var myRange = e.range;
    var targetRange = ss.getRange(myRangeAddress);



    if (ss.getName() == mySheetName && RangeIntersect(targetRange, myRange)) {
        var myVal = myRange.getValue();
        var Symbol = getSymbol(myVal);
        myRange.setValue(Symbol);
    }

}

function getSymbol(n) {
  var Symbols = ['○', '◔', '◑', '◕', '●'];
    if (n >=0 && n <=4) {
      return Symbols[n];
    }

    return 'not found';

}

function RangeIntersect(R1, R2) {

  var LR1 = R1.getLastRow();
  var Ro2 = R2.getRow();
  if (LR1 < Ro2) return false;


  var LR2 = R2.getLastRow();
  var Ro1 = R1.getRow();
  if (LR2 < Ro1) return false;

  var LC1 = R1.getLastColumn();
  var C2 = R2.getColumn();
  if (LC1 < C2) return false;

  var LC2 = R2.getLastColumn();
  var C1 = R1.getColumn();
  if (LC2 < C1) return false;

return true;

}