【发布时间】:2013-01-18 00:23:15
【问题描述】:
我有一个项目跟踪工具。 K 列有一个任务完成时的下拉菜单。下拉菜单可以选择将任务设置为“未交付”或“已交付”。我想对 L 列进行编程,以便每当有人选择“已交付”任务时,我都有该操作的时间戳。任何帮助,将不胜感激。
【问题讨论】:
标签: google-apps-script google-drive-api google-apps
我有一个项目跟踪工具。 K 列有一个任务完成时的下拉菜单。下拉菜单可以选择将任务设置为“未交付”或“已交付”。我想对 L 列进行编程,以便每当有人选择“已交付”任务时,我都有该操作的时间戳。任何帮助,将不胜感激。
【问题讨论】:
标签: google-apps-script google-drive-api google-apps
您可以使用附加到电子表格的脚本来执行此操作。如果您不熟悉电子表格中的 Google Apps-Script,请参阅 the tutorials。
这是一张符合您所描述的电子表格的图片:
下面的脚本将通过写入或清除 L 列中的时间戳来响应 K 列中的更改。由于电子表格中的每次更改都会调用它,因此它首先会检查是否发生了我们关心的更改,并且否则退出。
/**
* This function is an auto-trigger, because of its name. It will be
* invoked on every change in the spreadsheet. The only change that
* we're interested in is in Column K, and we want to put a timestamp
* into Column L if the value selected for Column K is "Completed".
*/
function onEdit(event){
var ColK = 11; // Column Number of "K"
var changedRange = event.source.getActiveRange();
if (changedRange.getColumn() == ColK) {
// An edit has occurred in Column K
var state = changedRange.getValue();
var adjacent = event.source.getActiveSheet().getRange(changedRange.getRow(),ColK+1);
var timestamp = new Date(); // Get the current time
// We'll do something different, depending on the selected value
switch (state) {
case "Completed":
// Write timestamp into adjacent cell
adjacent.setValue(timestamp);
break;
case "Not Completed":
// Erase timestamp in adjacent cell
adjacent.clearContent();
break;
default:
// Something we didn't expect
adjacent.setValue("*ERROR*");
break
}
}
}
待办事项:此脚本假定您只更改了一个单元格,这意味着无法正确处理将值复制到多个单元格。
【讨论】: