当前位置: 首页 > 知识库问答 >
问题:

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

段干瑞
2023-03-14

我有3个电子表格来存储登录/注销表的数据。签到/退出表(表1)、时间跟踪器表(表2)和镜像表(表3)。镜像表用于比较新列表和旧列表。我想解决的问题是使代码不在表1中。我想把它写在第二张纸上,但问题是这张纸上有所有的触发器,而内容是第1张纸。但因为这是人们将要使用的,我不希望他们能够找到代码并弄乱它,所以我希望sheet2能够用代码控制一切。以下是我认为与此问题相关的代码部分。当它出现在表1上时,它可以正常工作,但如果将它放在表2上,它就不起作用了。我把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);
}

总而言之,我试图使一个电子表格的OneEdit代码在另一个电子表格被编辑时能够触发。其他电子表格上没有任何代码。

共有1个答案

班浩皛
2023-03-14

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

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

 类似资料:
  • 我什么都试过了,但还是做不到 我试图使用setValues()将数据从一个电子表格复制到另一个电子表格,因为link对我不起作用。我还需要保持触发器的编辑。 因此,我创建了一个名为AddConvocacao的函数,并且总是在有任何更改时运行脚本。 为什么我在编辑时使用不起作用? 非常感谢!=)

  • B页中有图表,其中有源数据。我想以这样一种方式将图表导入到主电子表格B中,当图表在表格B中更改时,它也应该在主表格A中动态更改。 经过大量的研究,我能够找到以下内容: Importrange-只导入数据,而不是图表 复制图表本身并将其粘贴到主工作表A,但当图表在工作表B中动态变化时,它不会更改。 发布图表并将URL作为图像插入-如果主表A是google电子表格,则不起作用,但适用于google文档

  • 我正在尝试从多个google电子表格中删除一个特定的表格。 我有一个主电子表格,从所有其他电子表格收集数据。从主电子表格中,我可以在其他电子表格中执行不同类型的操作,如添加工作表、重命名工作表、隐藏和锁定工作表。 但无法删除其他电子表格中的表格。查看了其他线程,但找不到任何解决方法。 这就是我到目前为止得到的。它停在这一排: "fname.delete表(本周);}" 我很感谢大家对我的帮助,因为

  • 我正试图制作一个电子表格来管理我的资金/开支,但在尝试自动化我的流程时遇到了一个问题 我想制作一段代码,每次在工作表中编辑单元格时运行。 当被触发时,我希望它计算ssum,lsum和betal(在循环中),然后将其放入3个不同的单元格中。代码的行为符合预期,但onedit触发器不起作用。 这是我的代码: 输出变量根据调用函数的位置相应地设置相邻单元格 我试过使用setValue和clearCont

  • 我是一名编码等方面的初学者,但我正在努力理解我在做什么以及代码中发生了什么。 我想在不同的电子表格之间划一行。 我在“核心”电子表格中有一个脚本,它在“主页”和“完成”表格链接之间移动一行到电子表格: 我搜索了如何将位于“已完成”工作表上的数据移动到另一个名为“数据库”的电子表格链接到电子表格: 但我想将数据从表“CORE”/“Finished”传输到表“database”/“DB”,而不重写DB

  • 如果某个事件(编辑单元格)发生在工作表的特定范围内(不是所有工作表),我想用OneEdit触发一个触发器吗?示例:我只想在编辑活页_1中名为“trgRng”(C10:C250)范围的单元格时触发。 我编码如下,但它触发所有的工作表,而不仅仅是特定范围的特定工作表 可能吗?怎样