Google Spreadsheet || Typeerror:无法读取属性“0”

时间:2015-09-04 09:26:21

标签: google-sheets

我有一个项目数据电子表格,每个月根据每个项目ID记录时间表

我想遍历每个工作表,如果有匹配的项目ID,我想总结每个项目记录的小时数。

我已经编写了以下代码,但继续获取

  

TypeError:无法从undefined中读取属性“0”。 (第31行)。

这是我的工作表:https://goo.gl/rrsSxI

这是我的代码。

function TotalHours(TaskID) {

  var a = SpreadsheetApp.getActiveSpreadsheet().getSheets().length;
  var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
  var sum = 0;
  // var fcol = 0;


  for (var i = 1; i <= a; ++i) {

    // var sheetname = sheets[i].getName();
    //var cell = sheets[i].getActiveCell();

    //Set active cell to A1 on each sheet to start looking from there
    SpreadsheetApp.setActiveSheet(sheets[i])
      //var sheet = sh.getActiveSheet();
    var range = sheets[i].getRange("A1");
    //* sheets[i].setActiveRange(range);    

    var data = sheets[i].getDataRange().getValues();

    for (var row = 2; row <= data.length; ++row) {

      if (data[row][0] == TaskID) {

        for (var col = 2; col <= 31; ++col) {
          sum += sheets[i].getRange(row, col).getValue();
        }
      }
    }
  }

  return sum;

}

有人可以帮我解决我的错误。

1 个答案:

答案 0 :(得分:0)

我假设您要排除将要使用公式的工作表(“跟踪器”?

看看这是否有效?

function TotalHours(TaskID) {
var sum = 0,
    s = SpreadsheetApp.getActive(),
    active = s.getActiveSheet().getName(),
    sheets = s.getSheets();
for (var i = 0, slen = sheets.length; i < slen; i++) {
    if(sheets[i].getName() != active) {
    var sheetVal = sheets[i].getDataRange()
        .getValues();
    for (var j = 0, vlen = sheetVal.length; j < vlen; j++) {
        if (sheetVal[j][0] == TaskID) {
            for (var k = 2, rlen = sheetVal[j].length; k < rlen; k++) {
            var c = sheetVal[j][k]
                sum += c && !isNaN(parseFloat(c)) && isFinite(c)? c : 0; //check if cell holds a number
            }
        }
    }
    }
}
return sum;
}