簡體   English   中英

如何在Google Apps腳本中迭代范圍列表

[英]How to iterate through a list of ranges in Google Apps Script

我有Google表格,其中包含許多需要組織的名稱和小時。 我嘗試使用內置函數,但此工作表是其他工作表上其他輸入的結果(因此行的長度是可變的)

Sheet 1

   A       B       C        D       E                     T       U    
Project| Name1 | Hours1 | Name2 | Hours2 | ... | ... | Name10 | Hours10|  
————————————————————————————————————————————————————————————————————————
P1     | Larry | 10     | Bob   |  20    | ... | ... | Tim    | 10     |
P2     | Bob   | 15     | Tim   |  15    | ... | ... | Larry  | 15     | 
....   | ...   | ...    |  ...  | ...    | ... | ... | ...    | ...    | 
Pnth   | Tim   | 20     | Larry |  10    | ... | ... | Bob    | 10     |

到目前為止,我已經嘗試遍歷整個工作表並使用了要從中排序的名稱列表,但我需要它來采用可變長度的行。

function organize(){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var rangeList = sheet.getRangeList(['B1:C','D1:E','F1:G','H1:I','J1:K','L1:M','N1:O','P1:Q','R1:S','T1:U']);

我希望它看起來像(在另一張紙上):名單和總小時數

 Sheet 2

 Name | Total hours  | Number Projects Assigned|
 ——————————————————————————————————————————————
 Larry| TOTAL NUMBER |    4   (P1,P2,Pnth)     |
 Tim  | TOTAL NUMBER |    4   (P1,P2,Pnth)     |
 Bob  | TOTAL NUMBER |    4   (P1,P2,Pnth)     |

流:

  • 獲取范圍內的所有值
  • 垂直循環然后水平循環
  • 創建一個對象,每個名稱作為鍵,[hours,projects]作為值。
  • 將對象映射回2D數組

片段:

function organize(values) {
  var out = {};//out object
  values.forEach(function(row) {
    for (var col = 1, l = row.length; col < l; col += 2) {
      var name = row[col];
      out[name] = out[name] || [0, 0]; //[hours,projects]
      out[name][0] += row[col + 1]; //hours sum
      out[name][1]++; //projects sum
    }
  });

  return Object.keys(out).map(function(name) {
    return [name, out[name][0], out[name][1]]; //[name, hours and projects]
  });
}

如果用作自定義函數,

=organize(A2:U4)

返回名稱,小時和項目。

暫無
暫無

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

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