【问题标题】:Google Script return date when range is edited编辑范围时的 Google Script 返回日期
【发布时间】:2014-12-07 18:25:19
【问题描述】:

我目前正在编写电子表格的脚本。

期望的行为:当编辑单元格 F-I 时,最近编辑的日期应在相应行的单元格 L 中返回。

我找到了两个代码示例,第一个在编辑行中的任何字段时返回单元格 L 中的日期。这种行为是可以接受的,但并不理想,因为它适用于任何颜色

function onEdit() {
 var s = SpreadsheetApp.getActiveSheet();
 var r = s.getActiveCell();
 if( r.getColumn() != 2 ) {
   var row = r.getRow();
   var time = new Date();
   time = Utilities.formatDate(time, "GMT-05:00", "yyyy-MM-dd");
   SpreadsheetApp.getActiveSheet().getRange('L'+row.toString()).setValue(time);
  };
 };

第二个应该将日期返回到已编辑列右侧的一个单元格。这种行为是不可取的,因为它可能会覆盖其他重要数据。

function onEdit(e) {
var s = SpreadsheetApp.getActiveSheet();
var cols = [1, 7, 13, 19, 25, 31]
if (s.getName() !== "Sheet1" || cols.indexOf(e.range.columnStart) == -1) return;
s.getRange(e.range.rowStart, e.range.columnStart + 1)
    .setValue(new Date());
};

任何有关编辑这些以更接近预期结果的帮助或建议将不胜感激。谢谢!

【问题讨论】:

    标签: date google-apps-script google-sheets


    【解决方案1】:

    这样的事情应该可以工作:

    function onEdit(e) {
    var ss = e.source.getActiveSheet();
    var watchedCols = [6, 7, 8, 9]
    if (watchedCols.indexOf(e.range.columnStart) === -1) return;
    ss.getRange(e.range.rowStart, 12)
        .setValue(e.value ? Utilities.formatDate(new Date(), "GMT-05:00", "yyyy-MM-dd") : null)
    }
    

    请注意,该脚本适用于您的 Google 电子表格的每张表格。如果您想将其限制为仅一张纸(并且还排除第一行中的编辑(标题?)),您可以尝试这样的事情:

    function onEdit(e) {
    var ss = e.source.getActiveSheet();
    var watchedCols = [6, 7, 8, 9];
    var watchedSheet = 'Sheet1'; //change name if needed
    if (watchedCols.indexOf(e.range.columnStart) === -1 || ss.getName() !== watchedSheet || e.range.rowStart < 2) return;
    ss.getRange(e.range.rowStart, 12)
        .setValue(e.value ? Utilities.formatDate(new Date(), "GMT-05:00", "yyyy-MM-dd") : null)
    }
    

    希望有帮助吗?

    【讨论】:

    • 完美无瑕!感谢您的帮助。
    猜你喜欢
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-27
    • 2020-03-21
    • 2019-04-24
    • 1970-01-01
    • 2017-04-17
    相关资源
    最近更新 更多