使用应用脚本onEdit // MM:SS.MS转换为SS.MS,在Google表格中将基数60转换为基数10

时间:2014-06-16 15:41:31

标签: javascript function math google-apps-script google-sheets

我在当地的赛车俱乐部和我做时机。我们的计时装置将时间输出为 Minutes:Seconds.Milliseconds (MM:SS.MS),并希望输入该数字,但让该单元格自动将其转换为< strong> Seconds.Milliseconds (ss.ms)格式,因此我可以轻松地进行一些计算。我还想继续输入ss.ms格式。

示例:

工作表“时间”,列E,F,G,H和任何行都是我一直输入的位置。因此,如果我在单元格E3中保持1:24.78的时间,我希望它在同一单元格中转换为84.78。

我能够创建一个将MM:SS.MS转换为SS.MS的函数,但是我希望有一个定义的区域,当我在一个单元格中输入MM:SS.MS时它会自动转换onEdit在同一个单元格中。

function MTS() {
  var value   = arguments[0].split(".");
  var time    = value[0].split(":");
  var ms      = parseInt(value[1],10);
  var seconds = parseInt(time[time.length-1],10);
  var minutes = parseInt(time[time.length-2],10);
  var hours   = parseInt(time[time.length-3],10);

  var output = (minutes * 60) + seconds + '.' + ms;

  return output;

};

以下是相关Google电子表格的链接:

https://docs.google.com/spreadsheet/ccc?key=0AoFFjAyGmvrydGQ5VVd6cXJWTjJMZkhsRkc3bFplOXc&usp=sharing

2 个答案:

答案 0 :(得分:0)

MTS(e)内拨打onEdit,就像代码现在一样。使用传递的现有电子表格对象(由e表示)将值设置回转换后编辑的相同范围。 e.range.setValue(output);

答案 1 :(得分:0)

对于可能偶然发现这种情况的人,下面是 Bryan P 提出来解决我发布的确切问题。

function onEdit(e) {

  if ( e.range.getValue() && 
       /^(5|6|7|8)$/.test(e.range.columnStart) && 
       e.range.columnStart == e.range.columnEnd && 
       e.range.rowStart == e.range.rowEnd ) {

         MinutesToSeconds(e);    
  }
};


function MinutesToSeconds(e) {

  var value   = e.range.getValue().split(".");
  var time    = value[0].split(":");
  var ms      = parseInt(value[1],10);
  var seconds = parseInt(time[time.length-1],10);
  var minutes = parseInt(time[time.length-2],10);
  var output = (minutes * 60) + seconds + '.' + ms;

  e.range.setValue(output);

  return;
};

这只能转换为分钟,您可以在MinutesToSeconds()函数中为“hours”添加另一个变量。然后在变量“output”中更改数学。

var hours   = parseInt(time[time.length-3],10);

如果有人知道如何进行数小时的数学计算,即使没有数小时的数据,也可随意发布。

因为如果我这样做

var output = (hours * 60) * (minutes * 60) + seconds + '.' + ms;

并且没有和“小时”中的数据产生NaN错误。