如何使用 Google Apps 脚本在电子表格中查找按钮的位置?

Posted

技术标签:

【中文标题】如何使用 Google Apps 脚本在电子表格中查找按钮的位置?【英文标题】:How Can I Find a Button's Location Within a Spreadsheet With Google Apps Script? 【发布时间】:2021-01-12 13:33:35 【问题描述】:

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

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

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

【问题讨论】:

你的标题和描述似乎完全无关? 我不知道“绘图的位置”是什么意思,但是您应该可以将 now() 与 copyTo 一起使用,其参数如下: source.copyTo(ss.getRange('A1' ), contentsOnly: true); @Baby_Boy,我更新了问题的标题和描述。希望这能澄清我在寻找什么。 【参考方案1】:

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

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

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

示例代码:

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);
  

您可以根据自己的喜好更改时间戳的格式。在这个例子中,我只显示了当前时间。见Working with Dates and Times

输出:

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

【讨论】:

这太完美了!谢谢!

以上是关于如何使用 Google Apps 脚本在电子表格中查找按钮的位置?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Google 电子表格中的 Google Apps 脚本自动更新“站点地图”功能?

在 Google Apps 脚本中使用 BigQuery 连接到 Google 电子表格

在 Google Apps 脚本中从另一个电子表格编辑一个电子表格

如何使用 Google Apps 脚本将来自 Google 电子表格和 ScriptDB 的数据插入 BigQuery 表

使用 Apps 脚本在带有日期的 Google 电子表格中存档

仅通过 Google Apps 脚本值修改 Google 电子表格