标签: custom-function

在自定义函数中访问单元格坐标

有没有办法访问传递给我的函数的单元格的单元格坐标(以 A1 表示法)?

例如,如果我的功能是这样的

function displayA1Notation(myCell){
  return myCell.getA1Notation();
}
Run Code Online (Sandbox Code Playgroud)

我将以下内容放入单元格 B4 中:

=displayA1Notation(C6)
Run Code Online (Sandbox Code Playgroud)

我希望看到这个:

C6
Run Code Online (Sandbox Code Playgroud)

但我实际看到的是这样的:

Kansas
Run Code Online (Sandbox Code Playgroud)

(“Kansas”是C6的实际单元格值)

我知道这看起来很容易......我只是努力让它发挥作用。

谢谢~!

google-sheets google-apps-script custom-function

5
推荐指数
1
解决办法
2558
查看次数

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

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

断点不会中断执行。

我对这段代码有一些希望

function test() {
  var s = "test"
  Logger.log(s)
  return s + s
}
Run Code Online (Sandbox Code Playgroud)

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

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

debugging google-sheets google-apps-script custom-function

5
推荐指数
1
解决办法
5994
查看次数

Google电子表格自定义功能由内置电子表格功能组成

我在单元格中有以下功能.它从其他单元格中读取日期,而不是计算年龄并以"3周5天"的格式进行转换

=INT((TODAY()-D19)/7)&" weeks, "&(TODAY()-D19-(INT((TODAY()-D19)/7)*7))&" days"
Run Code Online (Sandbox Code Playgroud)

有用.

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

=AGEINWEEKS(D19)
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

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

function ageInWeeks(from_date) {
  return SpreadsheetApp.getActiveSheet().getRange("D16").setFormula('=ROUND((TODAY()-D16)/7)&" weeks, "&(TODAY()-D16-(ROUND((TODAY()-D16)/7)*7))&" days"');
}
Run Code Online (Sandbox Code Playgroud)

但它返回错误

错误:您无权调用setFormula(第3行,文件"Code")

先感谢您!

此致,Tomaž

google-sheets google-apps-script custom-function

5
推荐指数
1
解决办法
4683
查看次数

在脚本编辑器中设置Maps API密钥

据我了解,为了跟踪我们的配额使用情况,我们需要在我们计划使用的服务上向Google App Service提供API密钥.

在我的例子中,我有一个带有Origin和Destination的电子表格以及一个自定义函数来计算它们之间的距离.

我遇到了通过调用来满足配额的问题.getDirections():

错误:服务调用太多次一天:路由.(行**).

代码示例:

 function getDirections_(origin, destination) {
  var directionFinder = Maps.newDirectionFinder();
  directionFinder.setOrigin(origin);
  directionFinder.setDestination(destination);
  var directions = directionFinder.getDirections();  
  return directions;
}
Run Code Online (Sandbox Code Playgroud)

所以我读到如果我将API密钥分配给我的项目,我应该能够看到使用情况以及我与免费配额的接近程度.

在脚本编辑器中,我确实启用了"资源"菜单/"高级Google服务"下的所有API.然后我去了Google Developers Console,在那里我没有看到任何关于我的自定义函数调用Google Maps API或任何API使用次数的记录.

从逻辑上讲,我认为在我的脚本中我需要设置我的谷歌API密钥,以便我的脚本开始以我的用户名调用API并计算我使用某些API的时间.我想我现在正在使用谷歌地图API作为匿名,因为整个公司被分配了相同的IP,所以我们用尽许多数字来调用这个功能.

如果你知道一种方法将我的简单电子表格功能连接到我拥有的公共API访问密钥,请回复底线.

谢谢你,保罗

google-maps google-apps-script custom-function

5
推荐指数
1
解决办法
4581
查看次数

为什么 array_uintersect() 比较 array1 和 array2、array1 和 array1 以及 array2 和 array2 之间的元素?

测试脚本

$i = 0;
array_uintersect(['foo', 'bar'], ['baz', 'qux'], function($a, $b) use (&$i) {
    print_r([$a, $b, $i++]);
});
Run Code Online (Sandbox Code Playgroud)

实际结果

Array
(
    [0] => bar
    [1] => foo
    [2] => 0
)
Array
(
    [0] => qux
    [1] => baz
    [2] => 1
)
Array
(
    [0] => bar
    [1] => qux
    [2] => 2
)
Array
(
    [0] => bar
    [1] => foo
    [2] => 3
)
Run Code Online (Sandbox Code Playgroud)

预期结果

Array
(
    [0] => foo
    [1] => baz
    [2] => 0
)
Array …
Run Code Online (Sandbox Code Playgroud)

php arrays filtering array-intersect custom-function

5
推荐指数
1
解决办法
1211
查看次数

Google Sheet 不更新自定义函数返回值

我对 Google Apps 脚本(以及 JavaScript)非常陌生,但我一直在尝试修补它以获取乐趣。

我尝试编写一个脚本来获取 Google Sheets 中的 API 价格数据,但发现在同一单元格中重新评估脚本时返回的值没有更新。

下面是一个从 Coinbase 的 API 获取比特币价格数据的脚本。该脚本解析请求的 JSON 响应,如此处所述

function getBTCPrice() {
  var url = "https://api.coinbase.com/v2/prices/BTC-USD/spot";
  var response = UrlFetchApp.fetch(url);

  var jsonSpotPrice = response.getContentText();
  var parseSpotPrice = JSON.parse(jsonSpotPrice);
  var price = "$" + parseSpotPrice.data.amount;

  return price
}  
Run Code Online (Sandbox Code Playgroud)

现在,如果我输入=getBTCPrice()某个单元格,然后稍后重新评估,我会得到相同的价格;但是,如果我在不同的单元格中评估脚本,我会得到不同的结果。

我读过一些关于 Google 在单元格中缓存值的内容,因此可能不会评估脚本,因为单元格的值没有更改。这里是这样吗?如果是这样,有解决方法吗?

任何帮助是极大的赞赏!

google-apps google-sheets google-apps-script custom-function

5
推荐指数
1
解决办法
1万
查看次数

无法识别/工作的 Google 表格附加自定义功能

情况:我在 Google Apps Script 套件中创建了一个新项目。在我的 Code.gs 中,我定义了两个自定义函数,如下所示:

自定义函数定义

问题:当我尝试按照过程来测试附加组件(此处的说明)时,使用最新的代码和配置“已安装并启用”,我似乎无法使用脚本中定义的自定义函数:

自定义函数错误

任何想法为什么?

附加信息

如果我在不通过 G Suite 的情况下创建脚本,只需打开“工具”>“脚本”等,自定义函数就可以工作。也就是说,我确实需要采用 G 套件方式,因为我计划将此脚本作为附加组件发布。

另外,我知道脚本正在工作/正在执行,因为我有一些代码可以创建一个确实出现在工作表中的自定义菜单条目。

add-on google-sheets google-apps-script custom-function

5
推荐指数
0
解决办法
1529
查看次数

谷歌工作表单元格重新计算

我正在创建一个棋盘游戏,为此我决定选择 Google 表格。我已将我的问题简化为一个由一张纸和一个脚本组成的最小示例。


情况

以下几点参考我的骰子表:

  • 单元格B2:C5包含可用的骰子。第一列包含骰子精灵,第二列包含以逗号分隔的骰子面数。
    • 游戏设计视角:艺术家可以改变骰子图像。设计者可以改变骰子的面数。两种类型的更改都会自动传播到引用骰子的单元格。
  • 单元格E2:I2E10:I10包含特定throw。在每次投掷中有1 到 5 个B列中骰子的引用。
    • 游戏设计观点:有许多不同的游戏项目,每个项目都有可能不同的骰子来决定动作的结果。设计者可以添加或删除对骰子的引用,它会触发特定单元格的自动重新计算(在我们的例子中,这些单元格是K2K10)。
  • K2K10开始的单元格保存DICEFACES应用于范围E2:I2E10:I10的函数的结果。
    • 游戏设计观点:骰子面矩阵将进一步用于计算骰子概率。为简单起见,我将矩阵本身视为最终结果。
  • DICEFACES是我在Code.gs与样式表关联的文件中的脚本编辑器中创建的自定义函数。它返回与提供范围内的骰子对应的骰子面矩阵。它的身体如下:

    function DICEFACES(unused_ref_to_range_containing_dices)
    {
      var app  = SpreadsheetApp;
      var spr  = app.getActiveSheet();
    
      // In the end this array will hold the dice faces. For example two
      // 1d6 dices would result in …
    Run Code Online (Sandbox Code Playgroud)

google-sheets google-apps-script custom-function google-sheets-formula

5
推荐指数
1
解决办法
185
查看次数

如何修复“一天内调用的服务次数过多:urlfetch”错误?

我的 Google 表格中出现以下错误:

Service invoked too many times for one day: urlfetch
Run Code Online (Sandbox Code Playgroud)

我知道我没有进行 10 万次调用,但我的工作表中确实有很多自定义函数。我尝试制作一张新工作表并将脚本复制/粘贴到该工作表中,但我仍然遇到相同的错误。然后我切换了我的帐户,制作了一张新表,添加了代码,但仍然出现错误。

这仅仅是因为我在同一台计算机上吗?谷歌是否足够聪明以意识到我和试图这样做的人是同一个人?我非常怀疑,所以我想知道为什么它会抛出这个错误,即使在切换帐户并制作新表格之后。

除此之外,有什么方法可以确保我以后不会超过限制吗?这个错误让我至少回到了我正在做的事情上一天。我确实计划编写一个脚本来将导入的 HTML 作为值复制/粘贴到另一个工作表中,但是在我开始工作之前,我需要一个临时修复。


示例代码:

Service invoked too many times for one day: urlfetch
Run Code Online (Sandbox Code Playgroud)

那是用于特定功能的一组“代码”。我多次拉动两个不同的功能。我有大约 600 个一个函数,另一个函数有 4 个。如果所有这些都同时运行,那将只有一千多个调用。

我应该注意,我的驱动器中还有另一张工作表,它每小时自动更新一个UrlFetch. 我不相信这会影响这一点,因为拉率非常低。

json google-sheets urlfetch google-apps-script custom-function

5
推荐指数
1
解决办法
4212
查看次数

如何使用 for 对谷歌应用程序脚本中的范围求和?

我想使用谷歌应用程序脚本在谷歌电子表格中创建一个简单的自定义总和公式。

\n\n
 function somaDias(range, days) {\n   var sum = 0;\n\n   for(i=0; i<days; i++){\n     sum = sum + range[i];\n  }\n\n\n    return soma;\n    }\n
Run Code Online (Sandbox Code Playgroud)\n\n

我将在报告中使用此函数,该报告有一列包含每月每一天的货币值。这个想法是选择整列值,将其作为范围传递,然后将这些值求和到该月的某一天。我知道有问题

\n\n
  sum = sum + range[i];\n
Run Code Online (Sandbox Code Playgroud)\n\n

因为,当我用只有 1 的列测试它时...返回是“0111111”

\n\n

=somaDias(C9:C15;6) // 应该返回 6,但它返回 0111111

\n\n

我不想使用 =sum(),因为范围根据日期而变化。我想传递该月 30 天的范围,然后传递我想要求和的天数。如果我使用 sum,我就必须每天重新选择范围......

\n\n

我\xc2\xb4m 做错了什么?

\n

google-sheets google-apps-script custom-function

4
推荐指数
1
解决办法
4万
查看次数