簡體   English   中英

具有給定范圍和參數的自定義函數 - Google Apps Script

[英]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).

我試過測試,這里是返回值:

  1. Return range.length6
  2. Return range[0][a] : Squat
  3. 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 行。

修改:

我對您的腳本進行了以下更改:

  1. 您可以使用range.length來獲取給定范圍的總行數,而不是使用硬拷貝值10

  2. 公式中的movementvariation必須作為字符串傳遞:

     =loopMovement("Squat","Competition",...)
  3. 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); });
  4. 表達式range[i][c]返回具有所需值的字符串。 但是,您想要構造一個數值數組,因此您需要使用parseFloat()將其轉換為浮點數(假設它可能包含小數

     parseFloat(range[i][c])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM