1

Я знаю, что это простая функция, но я не могу ее решить. Я хочу написать простую функцию onEdit со следующими условиями: Если что-либо в строке (3 - xxx) изменено или обновлено, я хочу, чтобы дата actuel в определенном столбце. Например: Если я изменил ячейку B10, я хочу, чтобы дата actuel в ячейке G10. Также для обновления в ячейке E10. Моя головаАвтоматическая дата, если я меняю ячейку

function onEdit() { 
var s = SpreadsheetApp.getActiveSheet; 
var range = s.getActiveRange() 

Мой цикл по всем строкам является:

for(var i = 1; i<= range.getNumRows() ; i++){ 
var r = range.getCell(i, 1) 
if(s.getName() == "Sheet1") { 

Мой Условный оператор:

if(r.getColumn() == 2) { 
    var nextCell = r.offset(0, 2); 
    if(nextCell.getValue() === '') {//is empty? 
     var time = new Date(); 
     time = Utilities.formatDate(time, "GMT+01:00", "HH:mm:ss MM/dd/yy"); 
     nextCell.setValue(time); 
    } 
    }; 
}; 

Я буду рад, если кто-то может HelpMe ;-)

+0

вам не нужно использовать 'Utilities.formatDate' и возвращать Строка, вы можете напрямую вернуть объект даты, лист позаботится о его отображении по своему усмотрению. Это можно сделать вручную или по сценарию следующим образом: 'setNumberFormat (" HH: mm: ss MM/dd/yy ");' –

+0

Спасибо за ваш ответ! Он работает без проблем! Но теперь у меня еще одна проблема:) http://stackoverflow.com/questions/42227751/compare-two-colums-in-different-spreadsheets-in-google-script –

ответ

0
function onEdit() { 

var s = SpreadsheetApp.getActiveSheet(); 
// Instead of getting activeCell we get the whole range 
var range = s.getActiveRange() 

//Use For loop to go through each row and add the time Stamp 
for(var i = 1; i<= range.getNumRows() ; i++){ 

    var r = range.getCell(i, 1) //Assumption here is that data is pasted in one column only 
    // IF that is not always the case, you will have to get the range over which the data was pasted and select column 2 

    if(s.getName() == "Gesamt") { //checks that we're on the correct sheet 
     //var r = s.getActiveCell(); calling it again doesnt change its the value 
     // If it is first time keyword added, we will add the current date to "Date Added" Column 
     // We will if it is the first time the "Keyword" column has been written 
    for (var c = 1; c<=26; c++){ 
    if(r.getColumn() == c) { 
     var k = 26 - c; //every updated time to the column 26 in the same row 
     var nextCell = r.offset(0, k); 
     //if(nextCell.getValue() === '') {//is empty? 
      var time = new Date(); 
      time = Utilities.formatDate(time, "GMT+01:00", "HH:mm:ss MM/dd/yy"); 
      nextCell.setValue(time); 

     }; 
    }; 
    } 

} 
} 
0

Существует нет оснований петли на триггер-редактирования, как вы будете автоматически в правильной строки и столбца каждый раз, когда не является редактирование:

function onEdit(e){ 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var range = e.range; //gets edited range 
    var column = range.getColumn(); 
    if (column < 3){ //stops if column is too low 
    return; 
    } 
    if (column > 6){ //stops is column is too high 
    return; 
    } 

    //else puts date in same row in column G 
    var row = range.getRow(); 
    var time = new Date(); 
    var stringTime = Utilities.formatDate(time, "GMT+01:00", "HH:mm:ss MM/dd/yy"); 
    sheet.getRange(row, 7).setValue(stringTime); 

} 
+0

Огромное спасибо за ваш ответ! Я новичок в программировании скриптов и на этой неделе сделал первые шаги. Сегодня я создаю новую проблему ;-) http://stackoverflow.com/questions/42227751/compare-two-colums-in-different-spreadsheets-in-google-script , если вы можете мне помочь, я буду довольный! –

Смежные вопросы