首页 > 解决方案 > 如何使用 Google Apps 脚本在电子表格中查找按钮的位置?

问题描述

我正在 Google 表格中创建课堂考勤日志。我有一个列有每个学生的姓名,还有一个列是他们到达课堂的时间。我想为每个学生添加一个按钮,我可以单击该按钮来运行一个脚本,该脚本将当前时间插入到该学生的到达时间单元格中。有没有办法找到按钮的位置,以便我的脚本可以将时间插入适当的单元格?

这是我设置工作表的方式: https ://docs.google.com/spreadsheets/d/19wRj1zPGf1hm8PDUYtEF2XUxirhk2lIJbHAZF9e9YqE

有一个更好的方法吗?我玩弄了这个NOW()公式,但每次我在工作表中做任何其他事情时它都会更新。如果我能以某种方式强制它保持不变,这可能是一个可行的选择。

标签: google-apps-scriptgoogle-sheets

解决方案


根据我的理解,您希望获取正在单击的绘图的单元格行以包含特定学生的时间条目。

这是不可能的,当您单击图纸/图像时,您只是单击了图纸/图像。它不会使图像所在的单元格处于活动状态。因此,我们不能使用getActiveRangeandgetSelection方法来定位图像所在的单元格。

我能想到的一种解决方法是使用复选框而不是绘图。单击复选框时,它会使单元格处于活动状态。

示例代码:

function onEdit(e) {
  
  const sheet = e.source.getActiveSheet();
  const cell = e.range
  
  // Check if checkbox was checked and there is no time-entry yet
  if (cell.isChecked() == true && cell.offset(0,-1).isBlank()){
    
    //Include time entry on the left side of the checkbox
    //var date = Utilities.formatDate(new Date(), 'America/Los_Angeles', 'MMMM dd, yyyy HH:mm:ss Z');
    var date = Utilities.formatDate(new Date(), 'America/Los_Angeles', 'HH:mm:ss Z');
    cell.offset(0,-1).setValue(date);
    
    // Uncheck the checkbox
    cell.setValue(false);
  } else if (cell.isChecked() == true) {
    // Uncheck the checkbox
    cell.setValue(false);
  }
}

您可以根据自己的喜好更改时间戳的格式。在这个例子中,我只显示了当前时间。请参阅使用日期和时间

输出:

在此处输入图像描述

我在设置时间戳后重置了复选框。


推荐阅读