我制定了一个公式(我绝不是程序员)来满足我的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)
答案 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));
}