【问题标题】:Convert base 60 to base 10 in Google Sheets with apps script onEdit // MM:SS.MS to SS.MS使用应用脚本 onEdit // MM:SS.MS 到 SS.MS 在 Google 表格中将基数 60 转换为基数 10
【发布时间】:2014-06-16 15:41:31
【问题描述】:

我在当地的赛车俱乐部工作,我负责计时。我们的计时装置将时间输出为 Minutes:Seconds.Milliseconds (MM:SS.MS) 并希望输入该数字,但该单元格会自动将其转换为 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

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

  • 感谢 Bryan P 查看我的示例电子表格并弄乱了脚本!我对 GAS 还很陌生,这件事困扰了我好几天。
  • 快速问题,如何指定我希望它使用的特定工作表?我知道 getSheetByName(SheetName) 但不确定在哪里放置它。我会乱来看看我是否也能弄清楚。
  • 您必须将其添加为我提供的 IF 语句中的另一个条件。 && e.source.getActiveSheet().getName() == 'Sheet 1'
  • 太棒了,再次感谢。我知道 IF 声明中必须包含某些内容,但我确信它确实很热门。我也开始了解您创建的 IF 语句是如何工作的。
【解决方案2】:

对于可能偶然发现这一点的人,以下是 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() 函数中为“小时”添加另一个变量。然后更改变量“输出”中的数学运算。

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

如果有人知道如何计算几个小时的时间,即使没有几个小时的数据,请随时发布。

因为如果我这样做了

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

并且“小时”内没有数据,它会给出 NaN 错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-27
    • 1970-01-01
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多