Google工作表条目验证和更新脚本

时间:2016-06-16 23:05:17

标签: google-apps-script google-sheets

我在Google电子表格中有一个字段,其中包含电影和电视的有效时间码。格式为01:00:02:12,即小时分秒和帧。

我希望能够根据需要键入几个数字,因此3秒将是3 0 0然后进行验证并输入/格式化为00:00:03:00

我的工作非常简单,从一列到另一列,例如

A1我输入300

A2设置为= TEXT(A1," 00:00:00:00")当然显示为00:00:03:00

但是我不想要额外的列,所以我怎么能这样做,当我在输入300后退出一个字段时,它会运行一个验证,然后根据需要用00:00:03:00替换我的300条目?

1 个答案:

答案 0 :(得分:0)

这是script,它在A列(仅)中执行此类替换:

function onEdit(e) {
  if (e.range.getColumn() == 1 && e.value.oldValue == null) {
    var str = ('00000000' + e.value).slice(-8);
    str = str.slice(0,2) + ':' + str.slice(2,4) + ':' + str.slice(4,6) + ':' + str.slice(6,8);
    e.range.setValue(str);
  }
}

说明:给定一个像54321的数字,它将形成字符串0000000054321,只保留最后8个字符00054321,然后将它们成对切片并在其间插入冒号。

该脚本不执行任何验证。这是一个更详细的版本,它检查时间戳是否有意义,如果不是,则拒绝更改任何内容。 (我不知道你想要的一秒钟中有多少帧,这个帧使用24帧。)

function onEdit(e) {
  if (e.range.getColumn() == 1 && e.value.oldValue == null) {
    if (!(e.value >= 0 && e.value < 1e8)) {
      return;
    }
    var str = ('00000000' + e.value).slice(-8);
    var hours = str.slice(0,2); 
    var minutes = str.slice(2,4);
    var seconds = str.slice(4,6);
    var frames = str.slice(6,8);
    if (minutes > 59 || seconds > 59 || frames > 24) {
      return;
    }
    str = hours + ':' + minutes + ':' + seconds + ':' + frames;
    e.range.setValue(str);
  }
}