可能吗?当在另一个电子表格上进行编辑时,从一个电子表格运行onEdit / onChange

时间:2019-05-19 16:00:01

标签: google-apps-script google-sheets

我有3个电子表格来存储登录/注销表的数据。签到/签出工作表(sheet1),时间跟踪器工作表(sheet2)和镜像工作表(sheet3)镜像工作表用于将新列表与旧列表进行比较。 我要解决的问题是使代码不在sheet1上。我希望在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 个答案:

答案 0 :(得分:1)

那是不可能的,但是...

您可以在“其他”电子表格上添加一个可安装的onEdit(onChange触发器,并在“此”电子表格上进行所需的更改。