【发布时间】:2020-07-21 00:31:26
【问题描述】:
我一直在编写一个脚本来查找与昵称相关的数字(等级)。我为此创建了一个自定义函数。基本上,公式输入在昵称数组中找到该输入(昵称),它通过添加 2 将数组顺序转换为行号(+1,因为数组从 0 开始,并且由于我的列的索引而 +1)。完成后,它会转到排名号所在的列,这就是它返回的内容。
脚本运行良好,但是当我更新排名数字时,公式并不总是返回新值(但如果我再次运行公式,它会返回)所以我认为问题在于执行时间太长它或我的电子表格并不是真的每分钟都在重新计算,因为我已经设置了设置。
有什么问题,我该如何解决?谢谢!
这是自定义函数的代码:
/**
* Finds the rank of the inputed user
*
* @customfunction
*/
function FINDRECRUITRANK(Recruit_Name) {
var app = SpreadsheetApp;
var ss = app.getActiveSpreadsheet();
var display = ss.getSheetByName("DisplaySheet");
var lastRow = display.getRange("B133").getValue(); //B133 has a counter of total rows used
var allnicknamesbeta = display.getRange(2, 3, lastRow-1).getValues();
var allnicknames = allnicknamesbeta.map(function(r){ return r[0]; });
var index = allnicknames.indexOf(Recruit_Name) + 2; // +1 because array starts from 0 and +1 because of the first row index
var recruitRank = display.getRange(index, 4).getValue();
return recruitRank;
}
第一列是一个名称列表,其中包含一个数字(排名)。 5th clumn 有recruit_name。该函数的作用是在第一列中查找recruit_name,在这种情况下它将位于(2,1)上,然后复制分配给它的数字(排名,在这种情况下位于单元格(2,2)上)。这就是函数将返回的内容-> 2。 当我将 2 更改为 3(或任何其他数字!=2)时,问题就出现了,现在单元格(2,2)将有一个 3,但作为单元格(1,5)的函数输入没有改变,这就是为什么return 没有得到更新。
公式的返回没有在图片中,但它可能在例如(1,6)中。
【问题讨论】:
-
为了正确理解您的问题,您能否向我们展示用于复制您的问题的示例值?
-
@Tanaike 如果我们能够再添加一个标签 --> google-sheets-custom-function
-
@Rubén 感谢您提供的信息。那是新标签!我可以从你的评论中知道。谢谢。
-
@Tanaike 是的,这是一个新标签。
-
嗨!您是否考虑过使用onEdit 以便能够在电子表格中的某些内容发生更改时更新单元格?这将不允许您使用自定义功能,但可以让您更新单元格。但是,我们仍然可以将参数作为来自另一个单元格的值传递。你会对这样的答案感兴趣吗?
标签: google-apps-script google-sheets google-sheets-formula google-sheets-custom-function