可能吗?一个电子表格的onChange触发另一个电子表格的onChange

时间:2019-05-22 08:12:13

标签: javascript google-apps-script google-sheets

我有一张工作表,当onchange触发时,它会构成信息的镜像,以便稍后确定更改的行时用作参考。我已将此连接到查询功能。每当查询更新时,onChange函数就会运行。但是有时查询会表现得很奇怪,并且即使我在查询中看到信息,信息也会在复制到的工作表上显示为空白。而且,如果两台计算机同时查看查询,则很明显该查询并非在所有屏幕上都更新。所以我决定,为什么不这样做,而不是查询,我们以与更新镜像相同的方式来更新信息。因此,它将所有信息复制下来并放到工作表上,而无需查询。我认为这至少可以确保每个人都看到相同的信息。因此,我制作了一个查询表,并向其添加了一个onChange()触发器,该触发器可获取所有信息并将其粘贴到主表中,无论何时更新查询。 (即使它弄乱了,至少也更明显了,没有人看到任何不同的东西)。但是,当信息发布到主电子表格上时。电子表格的onChange函数没有触发。我认为只要有变化,它就会触发。无论。因此,我决定在查询表中创建一个新函数,在该表中插入和删除最后一行,甚至打个招呼,以为如果我对表进行更显着的更改,onChange()函数将触发。仍然没有。我很茫然。

function onChangeMirror() {
  var sos = SpreadsheetApp.openById("the sheet with the query");
  var sas = SpreadsheetApp.setActiveSpreadsheet(sos);
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s1 = ss.getActiveSheet();
  var lastRow = s1.getLastRow();
  var lastRow1 = s1.getLastRow()+1;
  var lastRow10 = s1.getLastRow() +10;
  var SRange = s1.getRange(2,1,lastRow,2);
  var A1Range = SRange.getA1Notation();
  var SData = SRange.getValues();
  var sos2 = SpreadsheetApp.openById("the sheet it's updating");
  var sas2 = SpreadsheetApp.setActiveSpreadsheet(sos2);
  var ss2 = SpreadsheetApp.getActiveSpreadsheet();
  var s2 = ss2.getActiveSheet();
  var MaxRow = s2.getMaxRows();
  s2.getRange(A1Range).setValues(SData);
  Logger.log(lastRow1)
  Logger.log(lastRow10)
  s2.getRange('A'+ lastRow1+':'+'B'+lastRow10).setValue(null);
  Logger.log(A1Range)
  if(MaxRow > '300') {
    s2.deleteRow(MaxRow)
  }
  else if(MaxRow < '301'){
    s2.insertRowAfter(MaxRow)
    s2.getRange('A'+(MaxRow+1)).setValue('HI')
  }
}

这是我正在使用的脚本

0 个答案:

没有答案