问题标签 [google-sheets-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.
google-apps-script - 如何创建模拟 RANK 公式的自定义函数?
我正在使用 Google 表格收集数据,供教师用于确定有资格获得 Title 1 服务的学生。
该表单将数据提供给 Google 表格,我想自动按类别对分数求和,然后在每个类别中对它们进行排名。
我有这段代码可以将摘要从一列复制到另一列,但是我需要对列进行排名,这就是我卡住的地方。有人可以帮助我了解如何对数据进行排名吗?
我想我可能需要一个for
循环——但我被困住了。
javascript - 如何从 Google Sheet App Script 返回#N/A?
这似乎是一个微不足道的问题。但是我花了一些时间,我仍然无法从互联网上找到任何线索。我一直在尝试解决方法。他们都不好看。返回null
orundefined
只会导致一个空白单元格。当然 return "#N/A" (作为一个字符串)远非好。
例如,我们在 Google App Script 中有一个函数。
在单元格 A1 和 A2 中
A1 和 A2 中显示的所需结果是
在工作表公式中,我们可以简单地使用=NA()
. 但在 App Script 中,我不能。
javascript - 插件内的公式权限错误 - getActiveUser
由于权限问题,我创建的自定义公式无法正常工作,但在遵循指南后,我仍然无法理解问题所在。
我编写了一个自定义公式“SUMIFALL”,并将其发布给与addon相同域的其他组成员。出于某种原因,当我们尝试在不包含实际脚本(但通过插件包含)的电子表格中使用它(包括我在内)时,它会生成以下错误:
错误 您无权调用 getActiveUser(第 37 行)。
遵循这些关于谷歌表格中自定义公式访问权限的指南:https ://developers.google.com/apps-script/guides/sheets/functions#advanced
特别是关于床单:
只读(可以使用大多数 get*() 方法,但不能使用 set*())。无法打开其他电子表格(SpreadsheetApp.openById() 或 SpreadsheetApp.openByUrl())。
我试图确保只使用 Get 函数,但它仍然会产生错误。编码:
他们还在他们的页面上提到:
如果您的自定义函数抛出错误消息您没有权限调用 X 服务,则该服务需要用户授权,因此无法在自定义函数中使用。
有谁知道可能是什么问题?对工作表内容的唯一操作是在提供的范围内,这与他们在页面上提供的示例非常相似。
提前致谢
google-apps-script - 有条件地运行 Google 表格自定义函数
我在 Google 表格中开发了一个使用付费 API 的自定义函数。问题是每次打开工作表时功能都会刷新(正常的 Google 工作表行为)。我该如何解决这个问题?
只有在参数发生变化的情况下,该函数如何才能运行?
如果不是这种情况,它应该保留以前的结果。
google-apps-script - 从谷歌表格中当前突出显示的单元格中获取行
我想创建一个数据验证列表,它会根据当前行自动更新。换句话说,我想要 C 列中的下拉列表,其中包含已为 A 列中的当前值输入到 C 列中的所有值。
我将它放在我的数据验证列表范围的隐藏列的第 1 行:
=SORT(UNIQUE(FILTER(C3:C,A3:A=C1,NOT(ISBLANK(C3:C)))))
它工作得很好,除了我必须C1
用当前列值手动更新A
值。次优。我希望条件A3:A=C1
是A3:A=C + CURRENTROW()
,CURRENTROW()
任何类型的函数或自定义函数将返回,你猜对了,当前行。我找不到任何能给我当前单元格或当前行的东西。我尝试了以下自定义功能:
所有 3 个变体都返回包含该函数的单元格的行号,但我想要用户当前所在的行号。有人可以告诉我如何获得这个值吗?非常感谢这里的任何帮助。
javascript - 计算具有文本删除线的单元格的数量
我想创建一个自定义函数来计算删除线文本的数量。是否可以创建一个脚本来执行此操作?
目前,我设法创建了一个脚本来计算带有删除线文本的单元格数,但是我必须每次针对不同的范围修改我的脚本,并且我无法创建一个自定义函数来计算具有删除线的单元格数文本删除线。
这是我的脚本:
结果在 L20 和脚本中的控件中
javascript - 带有复杂公式的 setValue() 或 setFormula()/“您无权调用 setFormula”
因此,当我尝试在 google 脚本中运行我的代码时,我的电子表格中不断收到此错误消息:
您无权调用 setFormula。
我尝试了 setValue() 和 setFormula() 并且错误是相同的。我在某处看到 setFormula() 仅适用于简单的公式(例如 A2*B2/C2)。
这是一个简单的函数,用于将超链接连接到所选单元格的内容并形成超链接 sintax。
如果有人知道没有错误消息的方法,谢谢。
google-apps-script - 如何在打开工作表时不执行功能?
我在谷歌表格上创建了一个请求外部链接的函数。我这样称呼这个函数:
但是,我总是打开工作表,调用函数并提出请求。我该如何解决?我想提出一次请求
javascript - 脚本确实删除所有行和列并重新运行自定义函数
我在谷歌表上有一个函数,它可以从 ESI 中推断数据并用所述数据填充行和列。由于数据变旧并且需要更新,因此可以方便地运行一个脚本来删除所述工作表的所有行和列(函数所在的 A1 除外)并重新运行该函数,以便用新数据重新填充它(有效地刷新工作表)。如果也可以只让它以大于或等于 24 小时的间隔执行,以免对数据服务器造成压力。
希望有人可以帮助我解决这个问题。
编辑:设法创建函数以刷新数据并重新运行自定义函数,但除了使用 sleep 命令外,还无法设置时间范围。
制作谷歌脚本我实现了这一点:
google-apps-script - How to add a table of contents to a Google Sheets spreadsheet?
I'm trying to add a table of contents to Google Sheets: simply want to include a list of all sheets inside the document, as clickable links (got 150+ sheets.)
I got it to work, but it's more complicated than I'd like, and leaves me with questions about custom functions in Google Sheets.
Here's what I have, set of course in Tools › Script editor
:
Using each formula, I get:
And then I can use the HYPERLINK
formula to get links: =hyperlink(concatenate("#gid=",A2), B2)
.
So it works.
However, I tried to do it all in one pass, like so:
But, as noted in the function's code comments, it does not work.
My questions are:
Is the fact that you cannot use built-in functions inside of Google Sheets' custom functions / Google Apps scripts actually documented anywhere? (I'd have saved a couple of hours of my life had I known.)
Any way to have the a custom function return clickable hyperlinks?
I suspect using Range
might do it, but I'm not comfortable with them (and the fact the above still works makes it less of an incentive to learn). Is there a way to have a custom function just evaluate a formula taken from another column?
NOTE: I don't want to use a macro. I want to use a solution that auto-updates when new sheets get inserted.
I realize there's a similar question here, with a very useful answer. This does not exactly answer my questions, but is a bit easier to use than my current solution.