我想在特定条件下将时间戳记写入不同的列。该功能应在范围内执行。我想将第13行用作标题行。
这是应该如何工作的:
时间戳1
如果在第14行的第8列或第9列中对单元格进行了编辑,则应在第10列的同一行中写入定义的时间戳(“ HH:MM:SS”)。
时间戳2
如果在第14行的第16列中编辑单元格,则应在第18列的同一行中写入时间戳。
为此,我使用下面的代码。不幸的是,这行不通。
如果将范围扩展到整个表,请在第一行中编写列标题(请参见:updateColName,timeStampColName),并按如下所示定义“ Header”变量,然后代码即可工作。
var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues();
我在做什么错了?
链接到工作表行减少的公共版本。
https://docs.google.com/spreadsheets/d/1otiQjBbQBUhAlULau0FR3wQYT0jvm8jJLNqnGYNMBoY/edit?usp=sharing
function onEdit(e)
{
var timezone = "GMT+2";
var timestamp_format = "HH:mm:ss";
var updateColName = "Watchlist";
var updateColName1 = "Letzte Prüfung";
var updateColName2 = "Entry Datum";
var timeStampColName = "Letzte Änderung";
var timeStampColName1 = "Letzte Änderung 2";
var now = new Date()
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Tickerprüfung');
var actRng = e.range;
var editColumn = actRng.getColumn();
var index = actRng.getRowIndex();
if (index>13) {
var headers = sheet.getRange(13, 1, 1, sheet.getLastColumn());
//Checks if column I has been edited and then writes a timestamp to column K in the same line
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(now, timezone, timestamp_format);
cell.setValue(date);
}
//Checks if column J has been edited and then writes a timestamp to column K in the same line
var dateCol = headers[0].indexOf(timeStampColName);
var updateCol = headers[0].indexOf(updateColName1); updateCol = updateCol+1;
if (dateCol > -1 && index > 1 && editColumn == updateCol) {
var cell = sheet.getRange(index, dateCol + 1);
var date = Utilities.formatDate(now, timezone, timestamp_format);
cell.setValue(date);
}
//Checks if column Q has been edited and then writes a timestamp to column S in the same line
var dateCol = headers[0].indexOf(timeStampColName1);
var updateCol = headers[0].indexOf(updateColName2); updateCol = updateCol+1;
if (dateCol > -1 && index > 1 && editColumn == updateCol) {
var cell = sheet.getRange(index, dateCol + 1);
cell.setValue(now);
}
}
}
答案 0 :(得分:2)
我认为您以错误的方式声明了标头:
var headers = sheet.getRange(13, 8).getValues();
这仅捕获单元格H13(第13行,第8列)上的值
如果要获取所有行值,则应执行以下操作:
var headers = sheet.getRange(13, 1, 1, sheet.getLastColumn());
答案 1 :(得分:0)
您的函数似乎有一些小错误。
要修复它们,请执行以下操作:
var headers = sheet.getRange(13, 8).getValues();
更改为var headers = sheet.getRange(13, 1, 1, sheet.getLastColumn());
Utilities.formatDate(new Date(), timezone, timestamp_format);
更改为Utilities.formatDate(now, timezone, timestamp_format);
。无需创建新的Date()对象。e
事件对象检测当前更改。将var actRng = SpreadsheetApp.getActiveRange();
更改为var actRng = e.range;
var index = actRng.getRowIndex();
if (index>13) {
//rest of the code
}
将代码更改为:
function onEdit(e)
{
var timezone = "GMT+2";
var timestamp_format = "HH:mm:ss";
var updateColName = "Watchlist";
var updateColName1 = "Letzte Prüfung";
var updateColName2 = "Entry Datum";
var timeStampColName = "Letzte Änderung";
var timeStampColName1 = "Letzte Änderung 2";
var now = new Date();
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Tickerprüfung');
var actRng = e.range;
var editColumn = actRng.getColumn()-1;
var index = actRng.getRowIndex();
Logger.log(actRng);
if (index>=13) {
var headers = sheet.getRange(13, 1, 1, sheet.getLastColumn()).getValues()[0];
var cell;
if (editColumn === headers.indexOf(updateColName) || editColumn === headers.indexOf(updateColName1)) {
//Checks if column I has been edited and then writes a timestamp to column K in the same line
//Checks if column J has been edited and then writes a timestamp to column K in the same line
cell = sheet.getRange(index, headers.indexOf(timeStampColName)+1);
} else if (editColumn == headers.indexOf(updateColName2)) {
//Checks if column Q has been edited and then writes a timestamp to column S in the same line
var cell = sheet.getRange(index, headers.indexOf(timeStampColName1)+1);
} else {
return;
}
cell.setValue(Utilities.formatDate(now, timezone, timestamp_format));
}
}
希望这会有所帮助!