我试图制作一个脚本,以将时间戳记放在电子表格的最后一行下。
我是脚本的新手,所以这是我的第一次尝试。
它实际上有效。彼此快速创建大量新值时,会有一点延迟。
这可能不是最干净的代码,可以肯定更容易完成吗?
我从其他人那里复制了功能搜索,而那部分我不明白。我花了很多时间进行更改,直到它起作用为止。并非完全符合预期,但可以正常工作。
关于如何优化和其他方法来完成这项工作,任何评论都会很好?
/*
Denne funktion ændrer værdien på aktivt ark lige under nederste række i kolonnen targetColumn HVIS arket er targetSheet til timestamp
Hvis sidste række allerede indeholder "Seneste ændring" overskrives denne.
Sikrer at der hele tiden en en tom række mellem den sidste med en værdi og timestamp'en.
*/
//Hvis man indsætter en værdi under den allerede eksisterende Timestamp vil jeg gerne kunne slette den 'gamle version' af timestamp.
function onEdit(edit) {
var timezone = "GMT+2"; //Timezone.
var timestamp_format = "dd-MM-yyyy HH:mm:ss"; // Timestamp Format.
var timestamp = Utilities.formatDate(new Date(), timezone, timestamp_format);
targetSheet = 'Ark1'; //Indsæt hvilket specifikke ark dette script skal virke på - NB! navnet skal være omringet af '.
var targetColumn = 'B'; //Indsæt i hvilken kolonne timestampet skal stå - NB! navnet skal være omringet af '.
var tekstColumn = 'A'; //Indsæt i hvilken kolonne "Seneste ændring" skal stå - NB! navnet skal være omringet af '.
tekstString = 'Seneste ændring'; //teksten der skal stå i forbindelse med timestamp - NB! teksten skal være omringet af '.
var ss = SpreadsheetApp.getActiveSpreadsheet();
var activeSheet = ss.getActiveSheet();
var activeSheetName = activeSheet.getName();
var targetRowLast = activeSheet.getLastRow();
var targetRowLast1 = activeSheet.getLastRow()-1;
var targetRowDelete = activeSheet.getLastRow()+1;
var targetRowNew = activeSheet.getLastRow()+4; // hvis der skal være flere/færre tomme rækker mellem sidste række og "Seneste ændring" - Skal minimum være 2.
var targetRangeLast = (targetColumn+targetRowLast);
var targetRangeDelete = (targetColumn+targetRowDelete);
var targetRangeNew = (targetColumn+targetRowNew);
var targetSheetName = ss.getSheetByName(targetSheet);
var tekstRangeLast = (tekstColumn+targetRowLast);
var tekstRangeLast1 = (tekstColumn+targetRowLast1);
var tekstRangeDelete = (tekstColumn+targetRowDelete);
var tekstRangeNew = (tekstColumn+targetRowNew);
var editRow = ss.getActiveCell();
var editRowId = editRow.getA1Notation();
var editValue = editRow.getValue();
var editRowNumber = editRow.getRow();
var test = ss.getRange(tekstRangeLast);
var testVal = test.getValue();
if(activeSheetName==targetSheet && editRowId==tekstRangeLast || editRowId==targetRangeLast) {
onSearch();
var remove = activeSheet.getRangeList([tekstRangeLast,targetRangeLast]);
remove.clearContent();
activeSheet.getRange(targetRangeNew).setValue(timestamp);
activeSheet.getRange(tekstRangeNew).setValue(tekstString);
editRow.setValue(editValue);
sidste();
} else if(activeSheetName==targetSheet && editRowNumber==targetRowLast) {
onSearch();
var remove = activeSheet.getRangeList([tekstRangeLast,targetRangeLast]);
remove.clearContent();
activeSheet.getRange(targetRangeNew).setValue(timestamp);
activeSheet.getRange(tekstRangeNew).setValue(tekstString);
sidste();
} else if(activeSheetName==targetSheet && editRowNumber==targetRowLast1){
var remove = activeSheet.getRangeList([tekstRangeLast,targetRangeLast]);
remove.clearContent();
activeSheet.getRange(targetRangeNew).setValue(timestamp);
activeSheet.getRange(tekstRangeNew).setValue(tekstString);
} else if(activeSheetName==targetSheet && targetRowLast<2){
activeSheet.getRange(targetRangeNew).setValue(timestamp);
activeSheet.getRange(tekstRangeNew).setValue(tekstString);
} else if(activeSheetName==targetSheet && testVal==tekstString){
activeSheet.getRange(targetRangeLast).setValue(timestamp);
activeSheet.getRange(tekstRangeLast).setValue(tekstString);
} else if(activeSheetName==targetSheet){
activeSheet.getRange(targetRangeNew).setValue(timestamp);
activeSheet.getRange(tekstRangeNew).setValue(tekstString);
//her skal der så en søgefunktion ind der kan finde tidligere Senest ændret samt timestamp og slette dem
}
}
function onSearch()
{
var searchString = tekstString;
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(targetSheet);
var column =1; //column Index
var columnValues = sheet.getRange(2, column, sheet.getLastRow()).getValues(); //1st is header row
var searchResult = columnValues.findIndex(searchString); //Row Index - 2
if(searchResult != -1)
{
//searchResult + 2 is row index.
SpreadsheetApp.getActiveSpreadsheet().setActiveRange(sheet.getRange(searchResult+2, 1,1,2));
var deleteLast = SpreadsheetApp.getActiveSpreadsheet().setActiveRange(sheet.getRange(searchResult+2, 1,1,2));
deleteLast.clearContent();
}
}
Array.prototype.findIndex = function(search){
if(search == "") return false;
for (var i=0; i<this.length; i++)
if (this[i] == search) return i;
return -1;
}
function sidste()
{
var ss = SpreadsheetApp.getActiveSpreadsheet();
var activeSheet = ss.getActiveSheet();
var sidsteRow = activeSheet.getLastRow()-1;
var sidsteRowRange = activeSheet.getRange(sidsteRow,1);
activeSheet.setActiveRange(sidsteRowRange);
}