如何在Google Apps脚本中迭代范围列表

问题描述 投票:0回答:1

我有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)     |
list loops google-apps-script google-sheets
1个回答
0
投票

Flow:

  • 获取范围内的所有值
  • 垂直循环然后水平循环
  • 创建一个对象,每个名称作为键,[hours,projects]作为值。
  • 将对象映射回2D数组

Snippet:

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)

返回名称,小时和项目。

© www.soinside.com 2019 - 2024. All rights reserved.