谷歌应用程序脚本两列摘要

时间:2016-02-17 13:29:10

标签: google-apps-script

我有一个谷歌电子表格,其中有两列与课程相对应:第一列包含了porfessors的名称(偶尔重复自己),第二列包含数字(小时数)。我想输出两列,第一列是porfessors的名字,第二列是所有小时的总和

我尝试使用以下代码,但它似乎给了我两个带有初始列的数组,就好像从不满足条件if(names [names.length-1] == namesColumn [i])。 我究竟做错了什么?



function resumeProfessors() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[1];
  var namesColumn = sheet.getRange("C4:C31").getValues();
  var lessonsColumn = sheet.getRange("G4:G31").getValues();
  var names = [];
  names.length = 0;
  var lessons = [];
  lessons.length = 0;
  namesColumn.sort();
  for (var i = 0; i < namesColumn.length; i++) {
    if (names[names.length-1] == namesColumn[i]){
    lessons[lessons.length-1] = lessons[lessons.length-1] + lessonsColumn[i];}
    else{
      sheet.getRange(i+4, 9).setValue(names[names.length-1] + namesColumn[i]);
      names[names.length] = namesColumn[i];
      lessons[lessons.length] = lessonsColumn[i];
    };}
writeResume(names, lessons);
}
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:4)

鉴于您的用例,建议您使用数据透视表或=QUERY公式。

但是,假设您的输入表看起来像这样-

input-sheet

预期的输出是这样的-

output-sheet

您可以尝试以下代码-

function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var input = ss.getSheetByName('Sheet1');
  var output = ss.getSheetByName('Sheet2');
  var inputValues = input.getDataRange().getValues();
  Logger.log(inputValues)
  for (var i = 1; i < inputValues.length; i++) {
    var name = inputValues[i][0];
    var totalHours = [];
    for (var j = 0; j < inputValues.length; j++) {
      var hours = inputValues[j][1];
      if (name == inputValues[j][0]) {
        totalHours.push(inputValues[j][1]);
      }
    }
    var outputValues = output.getDataRange().getValues();
    var newEntry = true;
    for (var k = 0; k < outputValues.length; k++) {
      if (name == outputValues[k][0]) {
        newEntry = false;
      }
    }
    if (newEntry) {
      output.appendRow([name,totalHours.reduce(function(a, b) {return a + b})]);
    }
  }
}

希望这会有所帮助。