自动填充不起作用 - Google App脚本

时间:2016-06-09 13:39:23

标签: google-apps-script

我在使用Google App Script中的自动填充功能时遇到了问题。

内置方法,如SpreadsheetApp。将提供一个自动完成菜单,其中包含可供选择的方法。

但是,如果我创建自己的子对象,自动完成会工作一段时间,然后它就会停止工作。

例如:

internal int _lineposition; public int LinePosition { get { return this._lineposition; } internal set { this._lineposition = value; } }

skywardRoster。会产生一段时间的方法选项,然后停止。

然而,代码仍然起作用,如果我手动输入代码,方法也可以工作,所以我知道声明必须正确。菜单根本不会出现,而且在我去的时候单独查找每个方法非常不方便。

我试过:打破变量并重新输入该行;将代码复制并粘贴回编辑器;使用不同浏览器;复制gs文件本身并在副本中工作;并完全退出并重新登录。似乎没有什么能让它重新开始工作。

我对编码很陌生,我不确定是什么导致这种情况。

有谁知道如何解决这个问题?

4 个答案:

答案 0 :(得分:2)

您可能需要查看Built-in Google Services:Using autocomplete

  

脚本编辑器提供内容辅助"功能,通常称为"自动完成,"它揭示了全局对象以及在脚本当前上下文中有效的方法和枚举。要显示自动填充建议,请选择菜单项编辑>内容辅助或按 Ctrl + Space 。每当您在返回Apps Script类的全局对象,枚举或方法调用之后键入句点时,自动填充建议也会自动出现。例如:

     
      
  • 如果单击脚本编辑器中的空白行并激活自动完成,您将看到全局对象的列表。
  •   
  • 如果键入全局对象的全名或从自动填充中选择一个,则键入.(句点),您将看到该类的所有方法和枚举。
  •   
  • 如果您输入几个字符并激活自动填充功能,您将看到以这些字符开头的所有有效建议。
  •   

答案 1 :(得分:0)

由于这是google脚本无法自动完成的第一个结果,因此,我将在此处发布我的解决方案,因为它可能会在将来对某人有所帮助。

当我第二次为变量赋值时,自动完成功能对我来说不再起作用。

示例:

var cell = tableRow.appendTableCell();
...
cell = tableRow.appendTableCell();

因此,也许只是在实现过程中为第二个赋值创建一个新变量,以使自动完成功能正常工作。完成实现后,可以将其替换为原始变量。

示例:

var cell = tableRow.appendTableCell();
...
var replaceMeCell = tableRow.appendTableCell(); // new variable during the implementation

实现完成后:

var cell = tableRow.appendTableCell();
...
cell = tableRow.appendTableCell(); // replace the newly created variable with the original one when you are done

希望这会有所帮助!

答案 2 :(得分:0)

我一直在寻找改善 Google Apps 脚本开发体验的方法。有时自动完成会错过上下文。例如对于 Google 电子表格触发事件参数。我通过使用 clasp 和 @ts-check 解决了这个问题。

clasp 允许在本地机器上编辑 VS Code 中的源代码。它可以拉取和推送 Google Apps 脚本代码。 Here is an article how to try it.

当您转到 VS Code 和设置环境时,您可以在 JavaScript 文件的开头添加 //@ts-check 以帮助自动完成特殊说明。 Here is the instructions set.

我的触发器示例如下所示(注意自动完成功能仅适用于 VS Code,Google Apps Script 云编辑器无法理解 @ts-check 指令):

//@ts-check

/**
 * @param {GoogleAppsScript.Events.SheetsOnEdit} e
 */
function onEditTrigger(e) {
    var spreadsheet = e.source;
    var activeSheet = spreadsheet.getActiveSheet();
    Logger.log(e.value);
}

答案 3 :(得分:-1)

我同意,与大多数其他实现相比,Google Script的自动完成功能非常差。但是,在大多数情况下,这种不足是无法理解的,并且有时可以保留该功能。

上下文丢失

自动完成功能仅限于Google对象(电子表格,文件等)。与它们一起使用时,您会获得自动完成提示,除非您将此类对象实例传递为参数。然后上下文丢失了,编辑器将不会在调用的函数内为您提供建议。那是因为js没有类型控制。

您可以将ID而不是对象(不是File实例,而是fileId)传递给函数,并在函数内部获取实例,但是在大多数情况下,此类操作会使脚本运行变慢。

Cameron Roberts的更好解决方案

卡梅伦·罗伯茨(Cameron Roberts)带来的东西可能是Goole's intence or a kind of hack,不知道。在函数开始时,将适当的对象实例分配给wariable参数,并将其注释为块:

function logFileChange(sheet, fileId){
  /*
    sheet = SpreadsheetApp.getActiveSheet();
  */
  sheet.appendRow([fileId]); // auto completion works here
}

Auto completion preserved