Имя пользователя и метка времени при редактировании ячейки в Google Sheets с использованием Google App Script - PullRequest
0 голосов
/ 06 ноября 2019

Я пытаюсь написать сценарий для достижения следующего:

Допустим, в полках Google данные вводятся в полку K. Я хотел бы, чтобы полковник L дал мне имя пользователя, который ввелДанные и Col M, чтобы показать мне, когда данные были введены с отметкой времени. Кроме того, если Col K будет обновляться позже в будущем, я хочу, чтобы Col L и M оставались как есть, но Col N показывал имя пользователя обновленного Col K и Col O, чтобы показать метку времени, когда пользователь обновил Col K.

Я написал скрипт (см. Ниже), который, кажется, отлично работает на столбцах K, L, M, N, O, однако, когда я изменяю сценарий на столбцы F, G, H, I,J Я получаю метки времени в столбцах H и J, но я не получаю имена пользователей в столбце G и I, что кажется странным. Может кто-нибудь увидеть, в чем здесь проблема?

function onEdit(event) {
  var name = event.range.getSheet().getName();
  switch (name) {
    case "AA":
      update(event)
      break;
  }
}


function update(event){

  var ColK = 11;  // Column Number of "K"

  var changedRange = SpreadsheetApp.getActiveRange();
  if (changedRange.getColumn() == ColK) {
  if (changedRange.getRowIndex() >=7 ) {
    // An edit has occurred in Column J
    var state = changedRange.getValue();
    var adjacentDate = SpreadsheetApp.getActive().getSheetByName("AA").getRange(changedRange.getRow(),ColK+4);
    var adjacentDate2 = SpreadsheetApp.getActive().getSheetByName("AA").getRange(changedRange.getRow(),ColK+2);
    var adjacentLDAP = SpreadsheetApp.getActive().getSheetByName("AA").getRange(changedRange.getRow(),ColK+3);
    var adjacentLDAP2 = SpreadsheetApp.getActive().getSheetByName("AA").getRange(changedRange.getRow(),ColK+1);
    var timestamp = new Date(); // Get the current time

    adjacentDate2.setValue(timestamp);
    adjacentLDAP2.setValue(Session.getActiveUser().getEmail());

    if (adjacentDate.getValue() == "") {

        // Write timestamp into adjacent cell
        adjacentDate.setValue(timestamp);
        adjacentLDAP.setValue(Session.getActiveUser().getEmail());
    }
  }
    }
}

1 Ответ

1 голос
/ 07 ноября 2019

Я предлагаю вам использовать что-то подобное, так как у вас может быть несколько правок, и вы можете очень легко исчерпать колонки. Затем вы можете использовать простую формулу для извлечения первого или последнего редактирования, если это необходимо, легко увидеть.

var triggerSheet = "AA"; //trigger sheet
var triggerRow = 7; //trigger row
var ColK = 11;  // trigger column
var ColL = 12;  // comma seperated users
var ColM = 13;  // comma seperated time stamps

function onEdit(event) {
  var name = event.range.getSheet().getName();
  switch (name) {
    case triggerSheet:
      update(event)
      break;
  }
}

function update(event){
  var changedRange = SpreadsheetApp.getActiveRange();
  if (changedRange.getColumn() == ColK) {
    if (changedRange.getRowIndex() >=triggerRow ) {
      var state = changedRange.getValue();
      var users = SpreadsheetApp.getActive().getSheetByName(triggerSheet).getRange(changedRange.getRow(),ColL);
      var times = SpreadsheetApp.getActive().getSheetByName(triggerSheet).getRange(changedRange.getRow(),ColM);
      var timestamp = new Date(); // Get the current time
      var originalUsers = users.getValue();
      var originalTimes = times.getValue();
      times.setValue(originalTimes+timestamp+",");
      users.setValue(originalUsers+Session.getActiveUser().getEmail()+",");
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...