我希望我的Google表格自动执行以下操作:
我已经为列A到E添加了命名范围,如下所示:
我找到了一个允许我执行datestamp / timestamp的代码,但它只适用于一列(来自https://www.internetgeeks.org/tech/add-timestamp-time-stamp-google-docs-spreadsheet/):
function onEdit(event)
{
var timezone = "PST";
var timestamp_format = "MM-dd-yy";
var updateColName = "Title";
var timeStampColName = "Date";
var sheet = event.source.getSheetByName('Sheet1');
var actRng = event.source.getActiveRange();
var editColumn = actRng.getColumn();
var index = actRng.getRowIndex();
var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues();
var dateCol = headers[0].indexOf(timeStampColName);
var updateCol = headers[0].indexOf(updateColName);
updateCol = updateCol + 1;
if (dateCol > -1 && index > 1 && editColumn == updateCol) {
var cell = sheet.getRange(index, dateCol + 1);
var date = Utilities.formatDate(new Date(), timezone, timestamp_format);
cell.setValue(date);
}
}
我尝试一遍又一遍地复制并粘贴相同的代码,只需更改updateColName
,timeStampColName
和timestamp_format
变量的值。
正如我发现的那样,您不能只复制和粘贴多个onEdit
函数,并期望它在同一文档上运行。
我一直试图找到解决方案一段时间了。如果我对编码有所了解,我觉得我能够弄清楚这一点,但我不知道。
以下是我的Google表格的链接:https://docs.google.com/spreadsheets/d/1_dW8erkzVJFT6aUiB-0SikeMTbCnXmoo3d5mgUBN910/edit?usp=sharing
答案 0 :(得分:0)
主要问题是你需要让函数在三个地方寻找编辑。您当前的代码仅在“标题”列中查找编辑内容。我添加了代码来查找其他位置。
function onEdit(event)
{
var timezone = "PST";
var datestamp_format = "MM-dd-yy";
var updateColName = "Title";
var dateStampColName = "Date";
var startEditColName = "TimeStart"; // edit column to signal time start
var startTimeColName = "TimeStart";
var stopEditColName = "TimeStop"; // edit column to signal time stop
var stopTimeColName = "TimeStop";
var sheet = event.source.getSheetByName('Sheet1');
var actRng = event.source.getActiveRange();
var editColumn = actRng.getColumn();
var index = actRng.getRowIndex();
var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues();
var dateCol = headers[0].indexOf(dateStampColName);
var updateCol = headers[0].indexOf(updateColName); updateCol = updateCol+1;
if (dateCol > -1 && index > 1 && editColumn == updateCol) {
var cell = sheet.getRange(index, dateCol + 1);
var date = Utilities.formatDate(new Date(), timezone, datestamp_format);
cell.setValue(date);
}
var startCol = headers[0].indexOf(startTimeColName);
var startEditCol = headers[0].indexOf(startEditColName); startEditCol = startEditCol+1;
if (startCol > -1 && index > 1 && editColumn == startEditCol) {
var cell1 = sheet.getRange(index, startCol + 1);
var date = new Date();
var startTime = date.toTimeString();
cell1.setValue(startTime);
}
var stopCol = headers[0].indexOf(stopTimeColName);
var stopEditCol = headers[0].indexOf(stopEditColName); stopEditCol = stopEditCol+1;
if (stopCol > -1 && index > 1 && editColumn == stopEditCol) {
var cell2 = sheet.getRange(index, stopCol + 1);
var date = new Date();
var stopTime = date.toTimeString();
cell2.setValue(stopTime);
}
}
我还将此作为单独的脚本 - Date_Timestamp.gs添加到您的'TimeStamp'脚本文件中,以便您可以看到该功能。
这无论如何都不是很漂亮,但它会按照你的要求行事。如果您需要更多解释或我没有回答您的问题,请告诉我。