Является ли это возможным? Запуск onEdit / onChange из одной электронной таблицы, когда редактирование происходит в другой электронной таблице - PullRequest
0 голосов
/ 19 мая 2019

У меня есть 3 таблицы для хранения данных для входа / выхода.лист входа / выхода (sheet1), лист отслеживания времени (sheet2) и зеркальный лист (sheet3) Зеркальный лист предназначен для сравнения нового списка со старым списком.Проблема, которую я хочу решить, состоит в том, чтобы сделать так, чтобы код не был на листе1.Я хочу, чтобы это было на sheet2, но проблема в том, что на листе есть все триггеры и что-то вроде sheet1.Но поскольку люди будут использовать это, я не хочу, чтобы они могли находить код и связываться с ним, поэтому я хочу, чтобы sheet2 контролировал все с помощью кода.Вот часть кода, которая, я думаю, имеет отношение к этой проблеме.он отлично работает, когда он находится на Sheet1, но помещает его на sheet2, и он не работает.Я положил setActiveSpreadsheet в надежде, что это все, что было нужно, но, очевидно, нет.

function onEdit(e) {
  var sos = SpreadsheetApp.openById("sheet1 id");
  var sas = SpreadsheetApp.setActiveSpreadsheet(sos);
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s1 = ss.getActiveSheet();
  var row = getCurrentRow()
  var Location = getValue('C' + row)
  var LocationA = getValue('A' + row)
  var LocationB = getValue('B' + row)
  var passiveRow = findRows(1,LocationA,2,LocationB,5,"");
  if(Location !== 'HOME' && Location !== "" && Location !== 'LOCATION' && passiveRow == "") {
  addRecord(LocationA, LocationB, Location, new Date());
  }

  else if(Location !== 'HOME' && Location !== "" && Location !== 'LOCATION'  && passiveRow !== "") {
    setValue('E' + passiveRow, new Date());
    setValue('F' + passiveRow, getDaysHoursAndMinutes(getValue('D' + passiveRow),getValue('E' + passiveRow)));
    addRecord(LocationA, LocationB, Location, new Date());    
  }

  else if(Location === 'HOME' && passiveRow !== "") {
    setValue('E' + passiveRow, new Date());
    setValue('F' + passiveRow, getDaysHoursAndMinutes(getValue('D' + passiveRow),getValue('E' + passiveRow)));
  }
}

///Functions to automatically add and replace dropdown boxes
function onChange(e){
  checkAndPlace();
  settingMirror();
  var sos = SpreadsheetApp.openById("sheet1 id");
  var sas = SpreadsheetApp.setActiveSpreadsheet(sos);
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s1 = ss.getActiveSheet();
  var FirstEmptyA = getFirstEmptyRow('A:A');
  var FirstEmptyC = getFirstEmptyRow('C:C');
  var dif = Math.abs(FirstEmptyA - FirstEmptyC);
  var EmptyArow =s1.getRange(FirstEmptyA ,3)
  var validationList = SpreadsheetApp.newDataValidation().requireValueInList(['HOME','SCHOOL','BANK','MALL'], true).build()
  if(FirstEmptyA - FirstEmptyC < 0){
    var rangedif =s1.getRange(FirstEmptyA+1,3,dif)
    rangedif.clearDataValidations();
    rangedif.clearContent();
  }

  else if(FirstEmptyC - FirstEmptyA < 0) {
    var rangedif =s1.getRange(FirstEmptyC +1,3,dif)
    rangedif.setDataValidation(validationList); 
    rangedif.setValue('OASIS');
  }
}

function getFirstEmptyRow(range) {
  var spr = SpreadsheetApp.getActiveSpreadsheet();
  var column = spr.getRange(range);
  var values = column.getValues();
  var ct = 0;
  while ( values[ct] && values[ct][0] != "" ) {
    ct++;
  }
  return (ct);
}

Итак, чтобы подвести итог, я пытаюсь сделать так, чтобы код onEdit одной электронной таблицы мог срабатывать, когда другая электронная таблицаизм.Без какого-либо кода в другой электронной таблице.

1 Ответ

1 голос
/ 20 мая 2019

Это невозможно, но ...

Вы можете добавить устанавливаемый триггер onEdit (onChange в «другой» электронной таблице и сделать необходимые изменения в «этой» электронной таблице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...