问题标签 [custom-function]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
50590 浏览

google-apps-script - 自定义函数抛出“您没有 setValue 所需的权限”错误

我正在尝试为 Google 电子表格中的单元格设置一些值:

如果我尝试使用此功能影响单元格,则会出现此错误:

您没有设置值所需的权限。(第 10 行,文件“ddd”)

你知道我怎么能让这成为可能吗?我实际上希望受影响的单元格取单元格 A1 的值并将 A1 的值增加 1。

0 投票
1 回答
6367 浏览

debugging - 如何在谷歌脚本中调试电子表格自定义函数?

我正在编写一个要在电子表格中使用的自定义函数,我希望至少能够显示一些数据。似乎很少有事情起作用,例如Browser.msgBox找不到适当的权限。

断点不会中断执行。

我对这段代码有一些希望

但是,当我将电子表格中"=test()"的一个单元格设置为该单元格时,该单元格正确显示了值“testtest”,但是当我返回脚本编辑器并使用视图>执行脚本时,或者view>logs我什么也看不到。

也许这个日志记录到某个地方的一个特殊文件?

0 投票
20 回答
100950 浏览

google-apps-script - 刷新由 Google 表格中的自定义函数检索到的数据

我编写了一个自定义 Google Apps 脚本,它将接收id并从网络服务获取信息(价格)。

我在电子表格中使用这个脚本,它工作得很好。我的问题是这些价格发生了变化,而我的电子表格没有更新。

如何强制它重新运行脚本并更新单元格(无需手动检查每个单元格)?

0 投票
2 回答
5481 浏览

google-apps-script - 由内置电子表格函数组成的 Google 电子表格自定义函数

我在一个单元格中有以下功能。它从其他单元格读取日期,然后计算年龄并将其转换为“3 周 5 天”格式

有用。

现在我想把这个长字符串替换成一个简单的函数:

我怎样才能做到这一点?

我已经尝试在脚本编辑器中编写此脚本

但它返回错误

错误:您无权调用 setFormula(第 3 行,文件“代码”)

先感谢您!

问候, 托马兹

0 投票
1 回答
4606 浏览

google-apps-script - 快速循环浏览多张工作表以查找数据

嗨,我正在尝试编写一个自定义函数,该函数采用一对单元格,遍历电子表格中的所有工作表以找到相同匹配的单元格对,并从同一行返回另一个值。

背景; 表 0 是所有 LOA 和 ID 组合(主要是位置和序列号)的主表,需要填写检查日期。进行这些检查的人使用 LOA-ID 组合 + 谷歌上的检查数据更新他们的个人工作表驾驶。我试图让主表在添加此数据时自动更新。

这些表都遵循相同的格式(LOA,第 1 列和第 2 列中的 ID,第 14 列中的检验日期)。这是我正在使用的自定义函数,可以按照我的意图进行操作,但运行速度非常慢。我如何使这个运行更快?每个细胞需要几秒钟;我需要运行超过 10k + 单元格。

0 投票
2 回答
2752 浏览

javascript - Google 电子表格的自定义函数 - 处理从电子表格传递的数组

我正在尝试构建一个简单的脚本来使用 Google 电子表格。电子表格从 Google 表单中获取输入,因此电子表格中有一系列值,如下所示:

http://i43.tinypic.com/2losg5.jpg

我的目标是编写一个脚本,从用户指定范围内的每个表单输入中去除数字,然后添加所有数字以提供单个分数。因此,例如,用户可以输入=sumColumns(H2:K2)一个单元格,它会返回分数的总和(对于我发布的示例屏幕截图,它将返回 , 的结果3+3+0+39

这是我为此编写的代码:

问题是它似乎只将两个值加在一起。所以,当我=sumColumns(H2:K2)在电子表格中输入一个单元格时,它只返回6. 另外,在第 3 行,如果我将它从 更改i <= values.lengthi < values.length它只会添加一个数字,因此我得到3了结果。我的猜测是我误解了将 Google 电子表格值传递给函数的方式,但我完全无法使其工作。我真的很感激任何帮助!

0 投票
1 回答
1250 浏览

google-apps-script - 为什么不能在自定义函数中使用 setValue?

我真的很好奇,但有谁知道为什么你不能使用 setValue 在自定义函数的不同单元格中写入?

自述文件解释说你不能这样做,但没有给出原因: link

自定义函数返回值,但它们不能在它们所在的单元格之外设置值。在大多数情况下,单元格 A1 中的自定义函数无法修改单元格 A5。但是,如果自定义函数返回双精度数组,则结果会溢出包含该函数的单元格并填充包含自定义函数的单元格下方和右侧的单元格。您可以使用包含 return [[1,2],[3,4]]; 的自定义函数对此进行测试。

任何人都知道这是否有充分的理由?

0 投票
0 回答
1875 浏览

google-apps-script - 通过单元格中的公式获取工作表名称

我的工作簿中有两张纸:

  • sheet1cell_1 的地址中,sheet1!A1我存储了我的数据。
  • sheet2cell_2 的地址中,sheet2!A1我有公式=sheet1!A1

所以 cell_2 的值总是反映 cell_1 的值。当我拖动 cell_1sheet1或重命名时,cell_2 中的公式会动态变化sheet1(例如:'=sheet1!A1' 转换为 '=newSheetName!B2')。

我不会从 cell_2 中的公式中得到 cell_1 的“工作表名称”“N of column”和“N of row”。我通过 COLUMN(cell_1) 获得的列的 N 和我通过行 (cell_1) 获得的行的 N。为了获得工作表名称,我尝试了一个宏:

然后当我将 cell_3 公式设置为=getSheetName(link_to_cell_1)它工作但如果我重命名sheet1此方法不会刷新 cell_3 的值。只有当我getSheetName通过触发器启动功能时它才能正常工作,最多每分钟一次。

如何从 cell_2 中的公式“即时”获取 cell_3 中的工作表名称?

0 投票
1 回答
2969 浏览

google-apps-script - 从 Google Apps 脚本自定义函数读取和写入单元格公式

我正在尝试编写一个将单元格内容复制到其他单元格的 GAS 电子表格自定义函数。而且我不仅需要使用源单元格的数据填充目标单元格,还需要使用其公式内容(如果有的话)。

现在,我已经知道通过自定义函数这基本上是不可能的,因为它们总是接收单元格计算的结果,而不是单元格公式本身,而且它们也无法返回其目标单元格的公式。

另一方面,有一些函数可以读取和写入单元格公式,例如Range.getFormula()Range.setFormula()这似乎使我的努力成为可能。我只需要找到另一种方式来称呼他们。更新: 同时我发现自定义公式实际上可以使用 读取公式getFormula(),但他们绝对没有权限使用setFormula().

我的问题是...

创建等效于读取和写入单元格公式内容的自定义函数的最优雅的方法是什么?我想我可以使用 onEdit 函数在每次电子表格编辑后更新我的目标单元格,但这意味着我必须对目标单元格范围的坐标进行硬编码,这看起来很hacky并且每次目标范围都需要更改代码被移动(例如,当在其上方插入行时)。

更新:示例

一个示例是一个自定义函数,它能够读取多个单元格范围(每个范围作为不同的函数参数给出)并返回一个连接的单元格范围。

=rangeJoin(A1:B10;D1:E15)

...将读取大小为 2x10 和 2x15 的两个范围,并将使用两个范围的后续单元格内容填充大小为 2x25 的目标范围。目标范围将从包含的单元格开始,rangeJoin并将向右扩展 2 个单元格,向下扩展 25 个单元格(与自定义函数一样)。自定义函数(或类似机制)应该能够复制公式,因此包含的单元格=hyperlink("http://www.google.com";"Google")应该作为超链接出现在目标范围中,而不是作为带有裸词“Google”的文本单元格。

0 投票
1 回答
1109 浏览

javascript - 从自定义函数设置注释


我正在努力解决以下问题:
我有一个负责跟踪我的股票市场投资的电子表格。它调用外部服务以获取具有当前价格的 CSV。

因此,有一个函数customFunction()可以调用UrlFetchApp并返回商品的当前价格。我希望它向调用它的单元格添加一条注释,其中包含当前日期时间。像这样的东西:

我从单元格 E21(值=customFunction())调用此函数。所以一切都按计划进行,除了应该设置注释的行。我确信我得到了正确的单元格(通过返回 A1notation 作为值进行测试)。我得到错误:

有谁知道是否可以为从该函数调用自定义函数的单元格设置注释?或者您可能对解决方法有任何想法,例如捕捉函数重新加载新数据并将其用作触发器的时刻?