转换base 60到base 10在谷歌表与应用程序脚本onEdit // MM:SS.MS到MS

Convert base 60 to base 10 in Google Sheets with apps script onEdit // MM:SS.MS to SS.MS

本文关键字:MS base onEdit MM SS 脚本 谷歌 转换 应用程序      更新时间:2023-09-26

我在当地一家赛车俱乐部工作,负责计时。我们的定时齿轮输出时间为分:秒。毫秒(MM:SS.MS)并希望输入该数字,但该单元格会自动将其转换为秒。毫秒(ss.ms)格式,所以我可以很容易地做一些计算。我还想继续输入ss.ms格式

例子:

表"时间",列E、F、G、H和任意一行是我输入所有时间的地方。因此,如果我在单元格E3中粘贴1:24.78的时间,我希望它在同一单元格中转换为84.78。

我能够创建一个函数来转换MM:SS。MS到SS,但我想有一个定义的区域,当我输入MM:SS。在单元格中,它将自动转换为同一单元格中的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;
};

这里是谷歌电子表格的链接:

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

onEdit中像现在这样调用MTS(e)。使用传递的现有电子表格对象(由e表示)将值设置回转换后编辑的相同范围。e.range.setValue(output);

对于那些可能偶然发现这个问题的人,以下是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;
};

这只转换到分钟,您可以在minutestosterone()函数中为"小时"添加另一个变量。然后更改变量"output"中的数学值。

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

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

因为如果我做了

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

和没有和数据在"小时"它给出一个NaN错误。