我正在创建一个基本脚本,从外部工作表中获取持续时间,然后对它们求和。到目前为止我所拥有的是:
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'中的数据是一个字符串。我想在那个单元格中获得持续时间。我怎么能这样做?
答案 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;
}
您最终可以通过一些错误捕获功能来改进此功能,以处理单元格空缺的情况......由于我不知道数据的样子我更喜欢让您自己动手。