我正在尝试在 Google Script 中输入一堆 javascript,并且我已经尝试了这个:
/**
* Get (named) range given by name
*
* @param {String} name
* @return {Range}
*
*/
function getRange(name) {
return SpreadsheetApp.getActiveSpreadsheet().getRangeByName(name);
}
它显示良好,并提供与内置 getRangeByName 相同的类型提示,但它实际上不起作用,即当我输入类似
getRange("hello").get"
之类的内容时,自动完成脚本编辑器不会自动完成,就像它应该的那样。我应该在 Range
之间留出名称间隔还是我做错了什么?
当前的 Google Apps Script IDE 不使用本地 JSDOC 来扩展自动完成功能。选项:
关于此时使用其他IDE,有一个名为CLASP的工具可以帮助下载/上传脚本,从而可以使用其他IDE。
资源
相关
其他相关
可以通过为其定义一个类,并在定义参数类型的构造函数上方添加注释,为普通的旧 JavaScript 对象添加类型提示
onEdit(e)(编辑单元格时)有一个事件,e 作为输入。 不幸的是,脚本编辑器中没有事件类型。 我们可以通过定义事件类并为参数 e 添加类型提示来解决这个问题,如下所示:
class User {
/**
* @param {string} email
* @param {string} nickname
*/
constructor(email, nickname) {
this.email = email;
this.nickname = nickname;
}
}
class Range {
/**
* @param {Number} columnEnd
* @param {Number} columnStart
* @param {Number} rowEnd
* @param {Number} rowStart
*/
constructor(columnEnd, columnStart, rowEnd, rowStart) {
this.columnEnd = columnEnd;
this.columnStart = columnStart;
this.rowEnd = rowEnd;
this.rowStart = rowStart;
}
}
class Event {
/**
* @param {string} value
* @param {User} user
* @param {ScriptApp.AuthMode} authMode
* @param {Range} range
* @param {string} oldValue
*/
constructor(value, user, authMode, range) {
this.value = value;
this.user = user;
this.authMode = authMode;
this.range = range;
}
}
/**
* @param {Event} e
*/
function onEdit(e) {
// now we have autocompletion on e properties
SpreadsheetApp.getUi().alert(JSON.stringify(e));
SpreadsheetApp.getUi().alert(e.user.email);
}
使用符合
SpreadsheetApp
资格的名称对我有用。
/**
* Get (named) range given by name
*
* @param {String} name
* @return {SpreadsheetApp.Range}
*
*/
function getRange(name) {
return SpreadsheetApp.getActiveSpreadsheet().getRangeByName(name);
}