需要帮助以自动运行我的Google表格公式onEdit

时间:2019-07-03 14:31:40

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

我制定了一个公式(我绝不是程序员)来满足我的Google表格需求。但是,一旦从Google表单更新了更多单元格,我就必须手动运行代码。然后,我将某些单元格移到另一张纸上,以根据此信息呈现报告,因此,每当有新信息时,我都需要运行此公式。我还有一列(“ O:O”),它从前一个日期开始加载,我不希望它加载到第二天,直到表单条目中有时间戳记为止,因为它会使工作表加载提前几天

function myFunction() {
 var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  ss.getRange("N2").setFormula("=(I2*0.01)+(H2*0.05)+(G2*0.1)+(F2*0.25)+(E2*0.5)+(D2)+(C2)");

  var lr = ss.getLastRow();
  var fillDownRange = ss.getRange(2, 14, lr-1);
  ss.getRange("N2").copyTo(fillDownRange);


  var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  ss.getRange("M2").setFormula("=N2-L2-J2");

  var lr = ss.getLastRow();
  var fillDownRange = ss.getRange(2, 13, lr-1);
  ss.getRange("M2").copyTo(fillDownRange);


     var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  ss.getRange("P3").setFormula("=N3-O3");

  var lr = ss.getLastRow();
  var fillDownRange = ss.getRange(2, 16, lr-1);
  ss.getRange("P3").copyTo(fillDownRange);


       var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  ss.getRange("O3").setFormula("=M2");

    var lr = ss.getLastRow();
  var fillDownRange = ss.getRange(3, 15, lr+1);
  ss.getRange("O3").copyTo(fillDownRange);

         var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  ss.getRange("Q2").setFormula("=A2");

           var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  ss.getRange("Q2").setNumberFormat('dd MMM yyyy');

    var lr = ss.getLastRow();
  var fillDownRange = ss.getRange(2, 17, lr-1);
  ss.getRange("Q2").copyTo(fillDownRange);


}

我的公式正在运行,但是就像我说的那样,我希望O列不要在条目之前加载,而是等待新的时间戳记生效,并且我希望我的公式在有新信息时立即进行计算。 在此先感谢您,如果我的问题做得不好,我们深表歉意。 (我第一次使用Stack Exchange)

1 个答案:

答案 0 :(得分:0)

这将在编辑电子表格中的任何工作表时运行。 onEdit()确保有真正的用户在编辑工作表,因此可以使用activeSpreadsheet()和activeSheet()。

function onEdit() {
  var ss = SpreadsheetApp.getActiveSheet();
  ss.getRange("N2").setFormula("=(I2*0.01)+(H2*0.05)+(G2*0.1)+(F2*0.25)+(E2*0.5)+(D2)+(C2)");
  ss.getRange("N2").copyTo(ss.getRange(2,14,ss.getLastRow()-1));
  ss.getRange("M2").setFormula("=N2-L2-J2");
  ss.getRange("M2").copyTo(ss.getRange(2, 13, ss.getLastRow()-1));
  ss.getRange("P3").setFormula("=N3-O3");
  ss.getRange("P3").copyTo(ss.getRange(2, 16, ss.getLastRow()-1));
  ss.getRange("O3").setFormula("=M2");
  ss.getRange("O3").copyTo(ss.getRange(3, 15, ss.getLastRow()-2));
  ss.getRange("Q2").setFormula("=A2");
  ss.getRange("Q2").setNumberFormat('dd MMM yyyy');
  ss.getRange("Q2").copyTo(ss.getRange(2, 17, ss.getLastRow()-1)); 
}

只要有新的表单提交,此功能就会运行。但是您不能使用activeSpreadsheet()或activeSheet()。您必须提供电子表格ID和工作表名称。

function onFormSubmitFunc() {
  var ss = SpreadsheetApp.openById('id').getSheetByName('somesheetname');
  ss.getRange("N2").setFormula("=(I2*0.01)+(H2*0.05)+(G2*0.1)+(F2*0.25)+(E2*0.5)+(D2)+(C2)");
  ss.getRange("N2").copyTo(ss.getRange(2,14,ss.getLastRow()-1));
  ss.getRange("M2").setFormula("=N2-L2-J2");
  ss.getRange("M2").copyTo(ss.getRange(2, 13, ss.getLastRow()-1));
  ss.getRange("P3").setFormula("=N3-O3");
  ss.getRange("P3").copyTo(ss.getRange(2, 16, ss.getLastRow()-1));
  ss.getRange("O3").setFormula("=M2");
  ss.getRange("O3").copyTo(ss.getRange(3, 15, ss.getLastRow()-2));
  ss.getRange("Q2").setFormula("=A2");
  ss.getRange("Q2").setNumberFormat('dd MMM yyyy');
  ss.getRange("Q2").copyTo(ss.getRange(2, 17, ss.getLastRow()-1)); 
}