标签: custom-function

自定义函数间歇性挂起并显示“错误 - 正在加载数据”

我有一个 Google Apps 脚本自定义函数,非常简单:

function sharesBurned(sharesToSell) {     
  return "tree"
}
Run Code Online (Sandbox Code Playgroud)

显然,当我在 Apps 脚本中测试它时,这是有效的。例如,在我的工作表中,当我在单元格中调用它时sharesBurned(2),它有时会返回“正在加载”,并且在单元格的右上角会出现一个红色三角形符号,当将鼠标悬停在该符号上时,会显示:“错误 -加载数据中...”。

我知道有几个关于此的线程,但它们已经很旧了,而且我已经尝试了所有建议,但都无济于事,即:

  • 更改函数名称
  • 刷新电子表格
  • 切换参数单元格
  • 复制电子表格
  • 清除浏览器缓存/cookie

需要明确的是,该函数有一半的时间无缝地加载到单元格中,而另一半则像这样卡住了。我非常怀疑这是脚本本身的问题,所以这可能是 Google Sheets 的一些奇怪的错误(缓存?没有线索)。

google-sheets google-apps-script custom-function

12
推荐指数
1
解决办法
2759
查看次数

将单元格引用传递给电子表格函数

当我调用电子表格函数时int(f2),该函数对单元格中的值进行操作.如果cell("F2")包含3.14159,则结果为3.但是当我调用不同类型的函数时 - 例如:row(f8)- 函数采用单元格引用,而不是值,在这种情况下,返回8.

如何让我的自定义函数使用引用而不是值?

我可以传递一个字符串,并使用getRange(),但是,如果我移动或更新工作表上的单元格,字符串将不会更改.

非常简单的例子:

function GetFormula(cellname) {
  return SpreadsheetApp.getActiveSheet().getRange(cellname).getFormula();
}
Run Code Online (Sandbox Code Playgroud)

在我的工作表代码中,我可以像这样检索C4中的公式: =GetFormula("C4")

但是,这个参数是一个字符串,我宁愿传递一个单元格引用.一个更复杂的问题需要在复制和粘贴时更新呼叫单元.

有任何想法吗?

google-sheets google-apps-script custom-function

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

在自定义功能中使用内置功能

在谷歌表中,我希望我的自定义功能使用其中一个内置函数.具体来说,此函数将字符串作为参数,梳理另一个工作表以找到该值,然后返回指向该单元格地址的链接.

function href(findMe) {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var hrefSheet = ss.getSheetByName("otherSheet");
  hrefSheet.activate();
  var rows = hrefSheet.getDataRange(); 
  var numRows = rows.getNumRows(); 
  var finds = rows.getValues()[1][0];

  var hrefCellRow;

  for(var i=0; i<numRows; i++){
    if(finds[i][0] == findMe){
      hrefCellRow = i+1;
      break;
    }
  }

  return address(hrefCellRow, 1); //address() is a function that is built in to sheets

}
Run Code Online (Sandbox Code Playgroud)

因此,如果我在"otherSheet"表单中有一个值"XYZ",那么当我输入时

=href("XYZ")
Run Code Online (Sandbox Code Playgroud)

我希望它尝试找到值XYZ并将地址返回到活动单元格.额外的荣誉如果它返回一个实际的链接,当点击,进入该单元格.

google-sheets google-apps-script custom-function

10
推荐指数
1
解决办法
3479
查看次数

GAS"您无权调用openById"

问题:当我运行脚本时,Google告诉我," 您无权调用openById. "

我从另一个Google电子表格中复制了一个脚本,并更改​​了target_ssKey变量的单元格引用,并在源电子表格和目标电子表格中创建了适当大小的命名范围.

GAS文档没有说明它可能无法工作的原因:

https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app#openById%28String%29

另一个GAS文档说它应该对我有用,因为我从自定义菜单中调用它:

https://developers.google.com/apps-script/guides/sheets/functions#using_apps_script_services

上面的第二个链接说:

如果您的自定义函数抛出错误消息您没有权限调用X服务.,该服务需要用户授权,因此不能用于自定义功能.

要使用上面列出的服务以外的服务,请创建一个运行Apps脚本功能的自定义菜单,而不是编写自定义功能.从菜单触发的功能将在必要时要求用户进行授权,因此可以使用所有Apps脚本服务.

我尝试将该函数放入"自定义函数"项目,然后放入"附加"项目,但仍然得到相同的错误消息.

关于我做错了什么以及如何使这项工作的任何想法?

这是我的确切代码:

function exportData_SStoSS() {
    //  Get the source data.
    var source_ss = SpreadsheetApp.getActiveSpreadsheet();
    var data = source_ss.getRangeByName("exportData").getValues();

    //  Identify the target.
    var controls_sh = source_ss.getSheetByName("Controls");
    var target_ssKey = controls_sh.getRange('C2').getValue();
    var target_ss = SpreadsheetApp.openById(target_ssKey);

    //  Paste the data to the target.
    target_ss.getRangeByName("importData").setValues(data);
};
Run Code Online (Sandbox Code Playgroud)

google-sheets google-apps-script custom-function

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

如何评估自定义函数中的电子表格公式?

在电子表格中,我可以输入=SIN(45)+123一个单元格,然后进行评估.

如何评估自定义函数中的电子表格函数,例如"eval"函数,它可以像这样工作:

function myFunc() {
  return Sheet.eval("=SIN(45)+123")
}
Run Code Online (Sandbox Code Playgroud)

可能吗 ?

请注意,我不关心SIN在特定的功能,我要的是能够访问的电子表格功能完整的阿森纳(PMT,QUERY,NPER,等.)

google-sheets google-apps-script custom-function

9
推荐指数
2
解决办法
7423
查看次数

所有自定义函数在一个电子表格中返回"未知函数",但在其他电子表格中工作

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

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

function double(d) {
  return 2*d;
}
Run Code Online (Sandbox Code Playgroud)

当我重复的电子表格,随之而来的代码DOES工作.

一些注意事项:

  1. 这是Google Apps for Enterprise帐户.

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

  3. 该电子表格最初具有受保护的区域,这些区域已被删除,认为这可能是原因.

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

有什么想法吗?

google-sheets google-apps-script custom-function

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

无法识别自定义函数

我在工作表中在工作表中创建了一个新函数。无法识别该函数:

  1. 从工作表工具 > 脚本编辑器中
  2. function DOUBLE(input) {
      return input * 2;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 节省

  4. 进入工作表,输入一个单元格并键入 =double(10)

  5. 错误“未知函数‘double’”

google-sheets google-apps-script custom-function

8
推荐指数
1
解决办法
4002
查看次数

Google表格中的条件格式:我可以在"自定义公式是:"字段中使用自定义函数吗?

在Google电子表格中应用条件格式时,我想知道是否可以使用我在"自定义公式"字段中通过脚本编辑器创建的自定义函数.这是我做的:

  1. 去'脚本编辑器'并键入我的fn如下:

    function foo (param1, param2, param3) {
      if (condition to check) {
        ...some action;
        return true;
      } else {
        return false;
      }
    }
    
    Run Code Online (Sandbox Code Playgroud)

    并保存.

  2. 在工作表中,选定单元格并打开"条件格式"对话框

  3. 创建新规则并在字段中'自定义公式是:'键入以下内容

    =foo(param1, param2, param3)
    
    Run Code Online (Sandbox Code Playgroud)

不幸的是,这不起作用.


加成

这是样本表 ......

看那里的两个任务.我的目标是将"任务标题"自动写入黄色字段内(请参阅第6行中我手动输入值的任务).

我已经尝试的是: - 分配给H5:BB7公式中的每个单元格:=if(H$4=D5; B5; "")
这将检查开始日期是否等于单元格日期并显示任务标题.这样就可以解决问题,但是即使"溢出"打开,具有任务标题的单元格的内容也会被剪切,因为下一个单元格不为空.

google-sheets google-apps-script gs-conditional-formatting custom-function

7
推荐指数
2
解决办法
1635
查看次数

Google Sheets 自定义函数支持多少 JsDoc?

Google 暗示支持 JsDoc:

如果自定义函数的脚本包含 JsDoc @customfunction 标记,则自定义函数将出现在此列表中,如下面的 DOUBLE() 示例所示。

https://developers.google.com/apps-script/guides/sheets/functions

但似乎并没有完全支持 JsDoc,而且我找不到显示支持和不支持的文档。

我特别寻找一种方法来记录自定义函数的参数是可选的。像这样,对于 value2:

在此输入图像描述

图片提供:https://yagisanatode.com/2018/08/24/google-apps-script-how-to-make-a-custom-function-to-use-in-google-sheets/

使用 JsDoc,您应该能够根据此源执行以下操作: https ://jsdoc.app/tags-param.html#optical-parameters-and-default-values

/**
 * @param {number} [value2] - Additional numbers or ranges to add to value1.
 */
Run Code Online (Sandbox Code Playgroud)

并且,使用默认值:

/**
 * @param {number} [value2=100] - Additional numbers or ranges to add to value1.
 */
Run Code Online (Sandbox Code Playgroud)

但我在谷歌表格中对此进行了测试,但这些都不起作用。甚至没有建议的 Google Closure Compiler 语法(如果可以的话):

/**
 * @param {number=} value2 - Additional numbers or ranges to add to value1.
 */
Run Code Online (Sandbox Code Playgroud)

目前我已经采取了不太优雅的方法:

/**
 * @param {number} value2 - …
Run Code Online (Sandbox Code Playgroud)

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

7
推荐指数
1
解决办法
2589
查看次数

如何在 R 中的自定义函数中的管道中传递动态列名称

我已经基于此线程使用 dplyr::mutate() 创建了一个动态列名称在 `dplyr` 中使用动态变量名称,现在我想对新列进行排序....但我没有正确传递该列姓名

library(glue)
library(dplyr)

# data
set.seed(123)
df <- data.frame(distance = sample(1:100, size = 10))

# custom function
multiply_function <- function(df, metric, multiplier){
  
  df %>% 
    mutate(., "{{metric}}_x{{multiplier}}" := {{metric}} * multiplier) %>% 
    arrange(desc("{{metric}}_x{{multiplier}}")) # <--- this is not working
}

df %>% 
  multiply_function(., metric = distance, multiplier = 3)

   distance distance_x3
1        31          93
2        79         237
3        51         153
4        14          42
5        67         201
6        42         126
7        50         150
8        43         129 …
Run Code Online (Sandbox Code Playgroud)

r dplyr custom-function

7
推荐指数
1
解决办法
643
查看次数