【问题标题】:google apps script two columns summary谷歌应用脚​​本两栏摘要
【发布时间】:2016-02-17 13:29:10
【问题描述】:

我有一个谷歌电子表格,其中有两列对应于课程:第一列是教授的名字(偶尔会重复自己),第二列是数字(小时数)。我想输出两列,第一列是 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);
}

【问题讨论】:

  • 添加有关您的电子表格的更多详细信息。如果您创建一个演示电子表格与知道链接的任何人共享它并在您的问题中包含该链接,这可能会很有用。有关详细信息,请参阅minimal reproducible example。另一方面,您是否知道使用内置函数和特性也可以做到这一点?
  • 同意 Ruben,如果可能,请创建一个示例电子表格和脚本

标签: google-apps-script


【解决方案1】:

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

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

预期的输出是这样的 -

你可以试试下面的代码-

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})]);
    }
  }
}

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-04
    相关资源
    最近更新 更多