首页 > 解决方案 > 谷歌表格:点击按钮取消突出显示行,突出显示下一行,并使用日期和时间按钮更新单元格被点击

问题描述

我正在尝试创建一个轮换调度程序。我的目标是有一张包含姓名、电话号码和按钮的表格。

按下按钮(“分配”)时,它会突出显示一行,并使用单击的日期和时间更新表格外的单元格。当再次按下它时,它会取消突出显示该行并突出显示下一行,并更新日期/时间单元格。

当它到达底部时,它应该回到顶部。它应该保存在关闭和打开文档之间停止的位置,即使有几个用户打开它,它也需要同步......我不认为 Excel 可以做到这一点,但 Google 表格应该能够,这就是为什么我我倾向于使用 Google 表格。

我完全理解如果期望有人在论坛上解决这个问题太过分了,但我非常感谢即使是在正确的方向上自己解决问题的一点!

标签: buttongoogle-apps-scriptgoogle-sheetsgoogle-sheets-macros

解决方案


按下按钮(“分配”)时,它会突出显示一行,并使用单击的日期和时间更新表格外的单元格。

您可以添加或创建充当按钮的图像,并关联单击时触发的脚本。

当它到达底部时,它应该回到顶部。

一种方法是跟踪突出显示的行并使用模运算返回到表的开头。

它应该保存在关闭和打开文档之间停止的位置

一种选择是使用属性服务来存储突出显示的行。

我尝试使用这些想法来实现一个示例(在运行之前制作一个副本):https ://docs.google.com/spreadsheets/d/1bHN5cf2HaLTW3EbAxfXUusQnDL3dNFY313J8cdTGp4o/

相关脚本:

var NUMBER_OF_ASSIGNEES = 5;
var LAST_ASSIGNMENT_DATETIME_CELL = 'G3';
var TABLE_OFFSET = 2;

function assignNewPerson(){
  var sheet = SpreadsheetApp.getActive().getActiveSheet();
  setAssignTime(sheet);
  assignNext(sheet); 
}

function setAssignTime(sheet) {
  var d = new Date();
  sheet.getRange(LAST_ASSIGNMENT_DATETIME_CELL).setValue(d.toLocaleTimeString());
}

function assignNext(sheet) {
  // Use the Properties Service to store the current assignee index.
  var documentProperties = PropertiesService.getDocumentProperties();
  var currentAssigneeIndex = parseInt(documentProperties.getProperty('CURRENT_ASSIGNEE_INDEX'));
  if (isNaN(currentAssigneeIndex)) {
    currentAssigneeIndex = 0;
  } 

  // Remove highlight from assignee cells.
  sheet.getRange(TABLE_OFFSET + currentAssigneeIndex, 1, 1, 2).setBackground("white");

  // Increment the assignee index. If the last row is reached, go back to the start of the table.
  currentAssigneeIndex = (currentAssigneeIndex + 1) % NUMBER_OF_ASSIGNEES; 
  documentProperties.setProperty('CURRENT_ASSIGNEE_INDEX', currentAssigneeIndex);

  // Highlight assignee cells.
  sheet.getRange(TABLE_OFFSET + currentAssigneeIndex, 1, 1, 2).setBackground("yellow");
}

推荐阅读