处理Google表格Api中的持续时间

时间:2014-09-25 19:31:28

标签: google-apps-script google-drive-api google-sheets

我正在创建一个基本脚本,从外部工作表中获取持续时间,然后对它们求和。到目前为止我所拥有的是:

function getHorasCasoUso() {
  var libros = {
    "key1" : "externalSheetURL1",
    "key2" : "externalSheetURL2",
    ...
  };

  var horas_por_caso_uso = {};

  for (var key in libros) {
    var libro = SpreadsheetApp.openByUrl(libros[key]);
    var sheets = libro.getSheets();
    for (var i = 0; i < sheets.length; i++) {
      var sheet = sheets[i];
      var rows = sheet.getDataRange();
      var numRows = rows.getNumRows();
      var values = rows.getValues();

      for (var j = 5; j < numRows; j++) {
        var row = values[j];
        var caso_uso = row[6];
        var horas = row[4]; //The cell format is 'Duration'       

        if (!caso_uso)
          continue;

        if (!!horas_por_caso_uso[caso_uso])
          horas_por_caso_uso[caso_uso] += horas;
        else
          horas_por_caso_uso[caso_uso] = horas;
      }
    }
  }

  var ss = SpreadsheetApp.getActiveSheet();
  for (var key in horas_por_caso_uso) {
    ss.appendRow([key, horas_por_caso_uso[key]]);
  }

}

问题是存储在'horas'中的数据是一个字符串。我想在那个单元格中获得持续时间。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

您的问题与this post中的问题非常相似,但规模更大......

在将该值添加到总计数器之前,您应该将row[4]值转换为分钟(如果您需要此精度,则为秒数)。

如果将单元格格式化为持续时间(如您所说),则应该无需更改即可。(请参阅本文末尾的代码)

如果没有,即如果这些值作为字符串返回,那么简单的字符串操作将为您完成这样的工作:

示例:testString = 12:34

function toMinutes(value){
  var minutes = Number(value.split(':')[0].replace(' ',''))*60+Number(value.split(':')[1].replace(' ',''));
  return minutes;
}

(作为函数运行的代码)将返回 754 (60 * 12 + 34)

代码中的

用法:var horas = toMinutes(row[4]);

function toMinutes(value){
  var duration = new Date(value);
  var min = duration.getMinutes()+60*duration.getHours();
  return min;
}

您最终可以通过一些错误捕获功能来改进此功能,以处理单元格空缺的情况......由于我不知道数据的样子我更喜欢让您自己动手。