我有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代码。在其他电子表格上没有任何代码。
答案 0 :(得分:1)
那是不可能的,但是...
您可以在“其他”电子表格上添加一个可安装的onEdit(onChange触发器,并在“此”电子表格上进行所需的更改。