小编Max*_*rov的帖子

公式使 SpreadsheetApp 在 Google Sheets 脚本中运行速度变慢

这个问题最近出现~2022年8月25日。

\n

我的onEdit触发器依赖于工作表名称,并且脚本运行时间太长而无法获取它。这是在我的环境中重现错误的最小脚本:

\n
function onEdit(e) {\n  var t = new Date();\n  console.log(\'we are in onEdit!\');\n  var sheetName = e.range.getSheet().getName();\n  console.log(sheetName);\n  console.log(\'We got sheet name. Time past = \' + (new Date() - t));\n}\n
Run Code Online (Sandbox Code Playgroud)\n

该函数range.getName()运行速度太慢,并且脚本超时。

\n

我以前从未见过这种行为。其他样本:SpreadsheetApp. 在我的另一个文件中,这一行需要 30 秒:

\n

SpreadsheetApp.openById(id);

\n

重现错误

\n

这是重现错误所需的最少代码的文件:

\n

onEdit 崩溃测试 \xe2\x9e\xa1\xef\xb8\x8f e.range.getSheet().getName()

\n

请复印一份。

\n

重现onEdit错误

\n
    \n
  1. 在第一个单元格中打印 1
  2. \n
  3. 立即按 Enter 键并打印 2
  4. \n
  5. 重复几次
  6. \n
  7. 转到脚本编辑器并查看执行时间
  8. \n
\n

原来的 …

performance triggers google-sheets google-apps-script google-sheets-formula

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

Google App脚本.检查Range1是否与Range2相交

今天是个好日子!

我想intersect在Google表格脚本中使用与VBA类似的功能.有一个很好的方法来做到这一点?该函数必须返回:

  • RangeIntersect(R1, R2) = true 如果R1与R2有共同的细胞,
  • RangeIntersect(R1, R2) = false 如果R1没有与R2共同的单元格

先感谢您.

速度测试

我希望功能尽可能快地运行.那是因为它将在onEdit函数内部的循环中使用.如果您愿意,可以使用此脚本测试提供的功能:

function speedtest () {
  var sheet;      
  sheet = SpreadsheetApp.getActiveSheet();      
  var rr1 = ['A1:C16', 'B2:B88', 'D1:D8', 'E1:E17', 'A18:B51', 'A13:A14', 'A17:C17'];

  var r1, r2;

  r1 = sheet.getRange(rr1[0]);      
  var rr2 = [];

  // define some ranges
  for (var x = 0; x < 30; x++) {
  for (var i = 0; i < rr1.length; i++) {
    r2 = sheet.getRange(rr1[i]);
    rr2.push(r2);
  }
  } …
Run Code Online (Sandbox Code Playgroud)

javascript google-sheets google-apps-script

3
推荐指数
3
解决办法
1359
查看次数

二维数组的位置排序

问题

我有一个二维数组,它实际上是输入到 Google Sheet 中的数据。它按逻辑排序,由用户定义。

目标是在此表的末尾输入新行,然后按位置对其进行排序。

截屏

说“按位置”我的意思是“欧洲”在“美国”之前,因为用户已经输入了它。

这是用于测试的示例数组:

var data = 
  [
    ['Earth', 'Europe', 'Britain', 'London'],
    ['Earth', 'Europe', 'Britain', 'Manchester'],
    ['Earth', 'Europe', 'Britain', 'Liverpool'],
    ['Earth', 'Europe', 'France', 'Paris'],
    ['Earth', 'Europe', 'France', 'Lion'],
    ['Earth', 'Europe', 'Italy', 'Rome'],
    ['Earth', 'Europe', 'Italy', 'Milan'],
    ['Earth', 'Europe', 'Greece', 'Athenes'],
    ['Earth', 'Asia', 'China', 'Pekin'],
    ['Earth', 'Africa', 'Algeria', 'Algiers'],
    ['Earth', 'America', 'USA', 'Dallas'],
    ['Earth', 'America', 'USA', 'New York'],
    ['Earth', 'America', 'USA', 'Chicago'],
    ['Tatooine', 'Yulab', 'Putesh', 'ASU'],
    ['Tatooine', 'Yulab', 'Putesh', 'Niatirb'],
    ['Tatooine', 'Yulab', 'Zalip', 'Duantan'],
    ['Tatooine', 'Asia', 'Solo', …
Run Code Online (Sandbox Code Playgroud)

javascript sorting grouping google-sheets google-apps-script

3
推荐指数
1
解决办法
661
查看次数

Sumif值是年份

我有日期和值的列表:

01.01.2016   100

01.02.2017   200

01.03.2017   300
Run Code Online (Sandbox Code Playgroud)

我想要的是现在如果2017年是数值.结果:200 + 300 = 500

这是我试过的公式:

=SUMIF($F5:$F,"<="&$A2,AF5:AF)
Run Code Online (Sandbox Code Playgroud)

问题是谷歌表无法比较日期和年份.当我将日期从2017年2月1日更改为2017年时,它可以正常工作.

如果我试图获得日期的年份它不起作用:

=SUMIF(YEAR($F5:$F),"="&$A2,AF5:AF)
Run Code Online (Sandbox Code Playgroud)

如何比较一年的日期?或者还有其他方式吗?

谢谢!

spreadsheet google-sheets

2
推荐指数
1
解决办法
1895
查看次数

如何基于键过滤JSON,所以我只有所有对象的一种键类型列表

[
  {
    "id":100,
    "account_id":8,
    "name":"Out of Service",
    "default":false,
    "created_at":"2012-02-06T08:51:29.720-06:00",
    "updated_at":"2012-02-06T08:51:29.720-06:00"
  },
  ...
]
Run Code Online (Sandbox Code Playgroud)

这是我的示例对象。我是从url提取应用程序请求中获得的。我该如何过滤它,以便我可以仅发布一种类型的Value的列表。

例如:如果我想将其作为键ID进行过滤,我想得到一个类似于:100,101,...的列表。

谢谢

javascript arrays json google-sheets google-apps-script

2
推荐指数
1
解决办法
63
查看次数