我有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) |
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)
返回名称,小时和项目。