[英]Custom function with given range and arguments - Google Apps Script
我有一個 Google Sheets 表格: Sheet 1 data table
和這個功能:
function loopMovement(movement, variation, range, a, b, c) {
let arr = [];
let projection = null;
for (let i=0; I<=range.length; i++) {
if (range[i][a]===movement && range[i][b]===variation){
projection = range[i][c];
arr.push(projection);
let maxProjection = Math.max(arr);
}
}
return maxProjection;
}
這是我在工作表 2 中的單元格: =loopMovement(Squat,Competition,Sheet1!A$2:E$7,0,1,4)
。 但是,我在行中返回了一個錯誤: if (range[i][a]===movement && range[i][b]===variation){
: TypeError: Cannot read property '0' of undefined (line 8).
我試過測試,這里是返回值:
Return range.length
: 6
Return range[0][a]
: Squat
Return range[0][c]
: 110
function loopMovement(movement, variation, range, a, b, c) {
let arr = [];
let projection = null;
for (let i=0; i<range.length; i++) {
if (range[i][a]===movement && range[i][b]===variation){
projection = parseFloat(range[i][c]);
arr.push(projection);
}
}
var maxProjection = arr.reduce(function(a, b) {
return Math.max(a, b);
});
return maxProjection;
}
並使用這樣的自定義函數:
=loopMovement("Squat","Competition",Sheet1!A$2:E$7,0,1,4)
您收到的錯誤消息:
類型錯誤:無法讀取未定義的屬性“0”
與 for 循環遍歷空行的事實有關。 根據您的屏幕截圖,不包括標題有 6 行。 但是,for 循環會迭代到第 10 行。
我對您的腳本進行了以下更改:
您可以使用range.length
來獲取給定范圍的總行數,而不是使用硬拷貝值10
。
公式中的movement
和variation
必須作為字符串傳遞:
=loopMovement("Squat","Competition",...)
Math.max()不接受數組作為參數。 例如, Math.max(1,5,2)
返回5
,但Math.max([1,5,2])
返回NaN
。
Array.reduce()可用於查找數值數組中的最大元素:
var maxProjection = arr.reduce(function(a, b) { return Math.max(a, b); });
表達式range[i][c]
返回具有所需值的字符串。 但是,您想要構造一個數值數組,因此您需要使用parseFloat()將其轉換為浮點數(假設它可能包含小數) :
parseFloat(range[i][c])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.