18

我有一些我一直在使用的简单自定义函数。我最近遇到了一个电子表格,我迫切需要在其中使用它们,但是当我尝试使用最基本的自定义函数时,我得到“#NAME?” 带有“未知功能”的悬停文本。

即使删除所有其他代码,只尝试这个简单的功能,似乎也不起作用:

function double(d) {
  return 2*d;
}

当我复制电子表格时,它附带的代码确实有效。

几点注意事项:

  1. 这是一个 Google Apps for Enterprise 帐户。

  2. 我最初不是这个电子表格的所有者,但后来成为了所有者,认为这可能是原因。

  3. 电子表格最初有受保护的区域,后来被删除,认为这可能是原因。

这个电子表格与数百人共享,所以我真的很想找到根本原因并修复它。

有什么想法吗?

4

10 回答 10

5

如果您已经作为插件发布,那么您需要通过以下步骤重新激活复制工作表的插件:

  • 单击菜单附加组件/您的添加名称/帮助/在商店中查看,
  • 单击管理,然后在下拉菜单中取消选中,然后再次选中“在此文档中使用”,以便将插件加载到当前工作表中。
于 2019-06-07T09:15:20.317 回答
4

对于 OP 来说为时已晚,但万一这对其他人有帮助:我遇到了类似的问题,我的电子表格突然停止识别已经工作了几个月的自定义函数。最近没有对代码进行任何更改,并且自上次工作以来甚至没有对电子表格进行过编辑。当我去它时,Tools > Script editor它仍然显示带有自定义函数的代码。

重新加载页面并关闭并重新打开并没有解决它。我添加了一个简单的无参数包装函数来使用一些适当的参数调用自定义函数。

然后我在调试器中运行这个包装函数,并在原始自定义函数中设置断点。当它碰到这个时,我切换回电子表格,它可以神奇地再次看到自定义函数。

于 2019-03-22T00:36:28.233 回答
3

我无法解释确切的原因,但这里有一个解决方案:

  1. 复制写在单元格中的表达式
  2. 删除单元格的内容
  3. 在单元格中重新输入表达式!
于 2021-01-24T16:43:48.687 回答
2

再次,在线程的后期,但这是我在此找到的唯一线程——我的函数也运行良好,突然返回未知函数。我发现签名已经改变 - 最初,我有一些我要发送的参数,并且返回错误的单元格在函数调用中仍然有参数。该函数已经很长时间没有使用参数了。我删除了参数,瞧!显然,在开始强制执行呼叫模式的地方发生了一些变化......

于 2019-06-06T12:28:02.600 回答
1

当您在工作表上有自定义功能时 - 它们BOUND针对该工作表。因此,当您复制sheet自身时它确实有效,但它不会自动成为全局或域范围的自定义函数。

在其他地方使用它而不实际将其作为附加组件发布的唯一方法是转到工具菜单,单击脚本编辑器并实际从绑定到它的工作表的脚本中复制代码,然后将其粘贴到要在其中使用它的工作表的脚本编辑器。

于 2016-10-15T19:50:15.160 回答
1

我遇到了同样的问题。我在这里记录,什么对我有用。

要创建一个的自定义函数,我执行了以下操作:

  1. 在电子表格中:菜单 -> 工具 -> 脚本编辑器
  2. 在脚本编辑器中编写函数
  3. 在电子表格中:菜单 -> 工具 -> 导入 -> 单击自定义函数名称旁边的“添加函数”。
  4. 在电子表格中:在一个单元格中,我做了=CustomFunctionName()

这行得通。

现在,当我想在另一个电子表格中重复使用相同的内容时,有两种方法可以做到这一点。

  1. Make Copy编写自定义函数的工作表。
  2. 通过编写特定于特定工作表的自定义函数,创建自定义函数库并在其他工作表中重用它们。

#1 复制写入自定义函数的工作表。

这样,整个自定义功能代码就会被复制。因此,如果需要在自定义函数中进行任何更改,则必须在所有复制的文件中进行更改。此外,一旦复制了工作表,自定义功能就不会简单地工作。我不得不删除单元格并再次重新输入函数名称,以使它们正常工作。

#2 通过编写特定于特定工作表的自定义函数,创建自定义函数库并在其他工作表中重用它们。

这更好,因为核心逻辑将留在一个地方。将为每个使用自定义函数的工作表编写包装函数。

要创建库:

  1. 在脚本编辑器中编写函数
  2. 单击“部署-> 新部署”
  3. “选择类型 -> 库”
  4. 如果您愿意,请提供描述并单击“部署”和“完成”
  5. 单击左侧菜单上的“项目设置”并复制“脚本 ID”(以使用库)

要使用库:

  1. 转到要在其中使用库的电子表格。
  2. 菜单 -> 工具 -> 脚本编辑器
  3. 在脚本编辑器中:单击+左侧库部分旁边的按钮。
  4. 输入“脚本 ID”并单击“查找”。
  5. 您将看到脚本详细信息。然后单击“添加”按钮。
  6. 记住“标识符”字段值。使用它,可以访问库的功能。
  7. 现在,在脚本编辑器中,您可以使用标识符名称调用库函数。请参阅下面的示例。

图书馆代码:

function SheetName() {
  return SpreadsheetApp.getActiveSpreadsheet().getName();
}

function SayHello(name) {
  return 'Hello ${name}';
}

假设,在将这个库包含到电子表格中时,我将标识符输入为utility. 所以,在脚本编辑器中,我会这样写:

function SheetName() {
  return utility.SheetName();
}

如何更新库并在电子表格中使用更新后的代码?

要更新库:

  1. 在库项目中进行更改。
  2. 单击“部署 -> 管理部署”。
  3. 从左侧选择正确的部署。
  4. 点击编辑按钮(左上角)。
  5. 在“版本”输入中选择“新版本”。
  6. 单击“部署”并记下显示的新版本号。

要使用更新的库:

  1. 转到已在其中使用库的电子表格并在其中打开脚本编辑器。
  2. 如果该工作表的脚本编辑器已经打开,请重新加载页面一次。
  3. 单击Library部分(左侧)中的库名称。
  4. 在输入中选择最新版本号并Version单击“保存”。

现在,您可以像以前一样调用新函数,现有函数将以新方式工作(如果现有函数有任何更改)。

于 2021-06-01T07:23:23.363 回答
0

我创建了我的工作表的副本作为备份并关闭了一夜。我早上回来时无法调用功能。所以我照常做,从单元格中剪切函数并将其粘贴回来。这通常可以解决问题。这次不行。尝试重新打开浏览器,尝试重新登录。没有任何效果。比我简单地在项目编辑器中重命名函数(在函数名称前附加“调用”)并编辑工作表以匹配。它刚刚奏效。

于 2021-04-02T22:12:03.940 回答
0

我遇到了完全相同的问题!我的代码运行良好,并正确链接到正确的电子表格。不幸的是,删除单元格的内容对我不起作用。

我发现的另一个解决方案是简单地重命名该函数。

例如:“ myFunction ”重命名为“ my_Function ”,它对我有用!我想这可能是由于大量的电话(在我的情况下超过 35 000)。也许它使它遇到错误或其他东西。干杯!

于 2021-02-18T15:46:24.153 回答
0

编写函数时,注释部分没有正确完成。这是我最初写的:

/* 
 A custom function that converts US Dollars to SwissFrancs

 @param {number} dollars The total number of dollars
 @return {number} swissFrancs The total number of SwissFrancs

 @customfunction
*/

检查评论后,我发现我错误地使用了评论符号。我应该在开始注释标记之后放置一个星号,/*并在注释中的每个换行符放置一个星号,最后在结束多行注释标记 ( */) 之前放置另一个星号,如下所示:

/** 
* A custom function that converts US Dollars to SwissFrancs
*
* @param {number} dollars The total number of dollars
* @return {number} swissFrancs The total number of SwissFrancs
*
* @customfunction
**/

最后一件事,不要忘记@customfunction在评论部分添加。

于 2021-11-19T16:27:10.900 回答
-1

另一个迟到的条目。此错误也可能是签名违规。如果传递给自定义函数的变量类型与预期不同,则可能会发生这种情况。我正在“清理”我的电子表格并重新格式化了一些条目。这导致了一个未找到。如果您启用了提示功能,则可以轻松检测此错误。在我的例子中,我开始输入函数名称并且它出现了(所以谷歌知道它在那里),但是当它执行时我得到了错误。

于 2021-03-06T14:24:37.887 回答