Google apps script Google Sheets应用程序脚本-将函数转换为特定单元格的OneEdit

Google apps script Google Sheets应用程序脚本-将函数转换为特定单元格的OneEdit,google-apps-script,Google Apps Script,我有一个函数,它在一系列单元格中设置一个公式,然后将该公式复制下来。 这似乎很有效 我想将其转换为onEdit函数,该函数在当前选项卡上编辑单元格D11时运行 到目前为止,我运气不太好 function copyDownAll() { let ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); ss.getRange("A12:C12").setFormula("=Master!A7&qu

我有一个函数,它在一系列单元格中设置一个公式,然后将该公式复制下来。 这似乎很有效

我想将其转换为onEdit函数,该函数在当前选项卡上编辑单元格D11时运行

到目前为止,我运气不太好

function copyDownAll() {
  let ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  ss.getRange("A12:C12").setFormula("=Master!A7");
  let noRows = ss.getMaxRows();
 
  let fillDownRange = ss.getRange(12,1,noRows+1,4);
  ss.getRange("A12:C12").copyTo(fillDownRange);
  
  let fillDownRange2 = ss.getRange(11,4,noRows+1,1);
  ss.getRange("D11").copyTo(fillDownRange2);
}

你的评论表明你有被感染的风险

为了避免潜在的麻烦,您可能希望探索将所有数据放在主控表中,并让每个人都在主控表中进行编辑

用于允许多个用户同时编辑工作表,而不会相互干扰。在冻结部分插入链接,以便在过滤器视图之间轻松切换-请参阅电子表格

为了回答您最初的问题,这类事情通常在Google表单中使用或完成。在单元格A12中尝试此操作:

={Master!A7:C}


这个表达式将用
Master
中的值填充
A:C列,经过一番搜索之后,我找到了下面的解决方案,到目前为止似乎很有效

function onEdit(e) {
  if(e.range.getA1Notation() =='D11'){

  let ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  ss.getRange("A12:C12").setFormula("=Master!A7");
  let noRows = ss.getMaxRows();
 
  let fillDownRange = ss.getRange(12,1,noRows+1,4);
  ss.getRange("A12:C12").copyTo(fillDownRange);
  
  let fillDownRange2 = ss.getRange(11,4,noRows+1,1);
  ss.getRange("D11").copyTo(fillDownRange2);
  };
};
参考:

考虑共享一个具有真实外观的公共可编辑数据,并在其中显示手动输入的预期结果。谢谢,但我需要将其作为OneEdit函数,因为我想在主控表上添加行时进行更新和刷新,当我使用您的方法编辑单元格D11时,我会得到一个#REF!删除行时出错。使用数组表达式,结果是完全动态的,并且始终是最新的。我不认为有任何源代码表转换会导致
#REF除了完全删除列<代码>:c>代码>。考虑共享一个可公开编辑的代码。代码获取编辑的表中的行数,因此它不可能复制出现在 M父中的所有非空值。A7:C
。此方法仅在硬编码的行号和列号保持有效时才有效。当编辑cell
D11
时,性能会受到影响,并且版本历史记录每次也会显示数千次更新。谢谢,我对应用程序脚本非常陌生。我有一张写着姓名和日期的母版纸。然后,每天都有自己的“日”选项卡。我希望日选项卡更新,但如果我添加或删除一行,则不更新,因为静态数据与动态数据对齐,如果插入一行并自动更新,则该行将不对齐。我想要一种方法,过去的所有日工作表都保持原样,将来的日工作表可以在添加或删除新行时更新。我意识到我没什么道理。但我很感激onEdit可能不是一条路要走。