分别为几列添加时间戳

问题描述 投票:0回答:2

当我编辑列

B
时,我尝试在列
A
中添加时间戳,并在编辑列
E
时在列
D
中添加时间戳。这些时间戳应该只显示时间,没有日期。

我试过这个:

 /** @OnlyCurrentDoc */
function onEdit(e){
const sh = e.source.getActiveSheet();
sh.getRange ('M' + e.range.rowStart)
.setValue (new Date())
.setNumberFormat ('MM/dd/yyyy HH:MMam/pm');
}

但是每次我编辑行中的任何单元格时,此代码都会对列

M
进行时间戳记,而不是仅对
A
B
D
E
进行时间戳记。

如何仅在编辑某些列时添加时间戳,并根据编辑的列将这些时间戳放在不同的列中?

google-sheets google-apps-script
2个回答
0
投票

您可以检查编辑了哪一列,并在 B 或 D 列中添加时间戳,如下所示:

/** @OnlyCurrentDoc */
function onEdit(e) {
  if (e.range.getColumn() == 1 || e.range.getColumn() == 3) {
    const sheet = SpreadsheetApp.getActiveSheet();
    sheet.getRange(e.range.getRow(), e.range.getColumn() + 1)
        .setValue(new Date())
        .setNumberFormat('HH:MMam/pm');
  }
 }

0
投票

有许多经过尝试和测试的时间戳脚本。您可能想使用其中之一,而不是从头开始编写自己的。

要使用我的 yetAnotherTimestamp_ 脚本执行您要求的操作,请在脚本中使用这些参数:

      // [START modifiable parameters]
      {
        sheets: /^(.+|Sheet2|Sheet3)$/i,
        watch: {
          columns: ['A', 'D',],
          values: /./i,
          rowStart: 2,
          rowEnd: +Infinity,
        },
        stamp: {
          columns: ['B', 'E',],
          format: 'hh:mm am/pm',
          overwrite: true,
          eraseOnDelete: false,
        },
      },
      // [END modifiable parameters]

要添加更多列,请编辑两个

columns
数组。要选择脚本响应哪个
sheets
和触发器
values
,请编辑相关 正则表达式.

我链接的脚本经过优化并使用 事件对象

e
。它比使用
e.range.getColumn()
e.range.getRow()
的较短脚本运行得更快。请参阅这些 onEdit(e) 优化技巧

© www.soinside.com 2019 - 2024. All rights reserved.