我正在尝试在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")
我似乎无法想出这个......
答案 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;
}