Google apps script 如何在电子表格中插入两个日期的总和结果
如何在电子表格中插入两个日期的总和结果 数据:Google apps script 如何在电子表格中插入两个日期的总和结果,google-apps-script,google-sheets,Google Apps Script,Google Sheets,如何在电子表格中插入两个日期的总和结果 数据: H3:27/11/2013 1:31:00 F3:00:15 I3:应使用以下公式显示求和(H3+F3)的结果=求和(H3+F3)。结果是27/11/2013 1:49:00(24小时格式化) 行动: 仅当某些人在第3行开始的F列中插入值时才应执行 仅应为修改的行执行 应在第I列中插入结果,即H+F之和 这里我有1和2的开始脚本 function CreationDate(event){ //Script Sume Date var
- H3:
27/11/2013 1:31:00
- F3:
00:15
- I3:应使用以下公式显示求和(H3+F3)的结果
。结果是=求和(H3+F3)
(24小时格式化)27/11/2013 1:49:00
function CreationDate(event){
//Script Sume Date
var actSht = event.source.getActiveSheet();
if (actSht.getName() == "sheet1"){
var activeCell = actSht.getActiveCell(); //Detec the ActiveCell
var column = activeCell.getColumn(); // Detect the Column of the ActiveCell
var colNums = [6]; //Coulmns, whose edit is considered
if(colNums.indexOf(column) == -1) return; //If column other than considered then return
var row = activeCell.getRow(); //Detect the ActiveRow
if(row < 3) return; //If header row then return
函数创建日期(事件){
//脚本Sume日期
var actSht=event.source.getActiveSheet();
如果(actSht.getName()=“sheet1”){
var activeCell=actSht.getActiveCell();//检测activeCell
var column=activeCell.getColumn();//检测activeCell的列
var colNums=[6];//Coulmns,考虑对其进行编辑
if(colNums.indexOf(column)==-1)返回;//如果未考虑列,则返回
var row=activeCell.getRow();//检测ActiveRow
if(行<3)返回;//如果标题行,则返回
测试:
我尝试格式化此脚本以对数据求和,并将结果返回到dd/mm/yyyy hh:mm:ss中,但我没有幸运
为什么需要
尽快运行这个公式是非常重要的,因为我使用它来安排对全国许多ISP的关键呼叫
我尝试使用=arrayformula(sum(h3+f3))
但不起作用。我需要一个脚本,因为我一直在添加新行
我将感谢你的帮助
最重要的是,例如,第3行中亚当公式的单行版本是:
=IF(ISNUMBER(H3)*ISNUMBER(F3);H3+F3;IFERROR(1/0))
由于您担心用户可能会损坏公式,因此可以使用onEdit()触发器函数确保在编辑F列中的数据时,在I列中更新公式
// When a value is entered in column F, set I = H + F, for rows >= 3.
function onEdit(e) {
if (!e) { // This block is for testing in debugger; always uses row 3
e = {};
e.range = SpreadsheetApp.getActiveSheet().getRange('F3');
e.value = e.range.getValue();
}
var row = e.range.getRow();
var col = e.range.getColumn();
if (col == 6 && row >= 3) {
// Insert single-cell version of Adam's formula into I
e.range.getSheet().getRange(row,9)
.setFormula('=IF(ISNUMBER(H'+row+')*ISNUMBER(F'+row+');H'+row+'+F'+row+';IFERROR(1/0))');
}
}
在公式中插入正确行号的另一种方法是使用正则表达式替换:
...
// Insert single-cell version of Adam's formula into I
var rowTag = new RegExp('%ROW%','g');
var formula = '=IF(ISNUMBER(H%ROW%)*ISNUMBER(F%ROW%);H%ROW%+F%ROW%;IFERROR(1/0))'
.replace(rowTag,row);
e.range.getSheet().getRange(row,9).setFormula(formula);
...
如果数据从第3行开始,那么
I3
中的数组公式解将是=ArrayFormula(If(ISNUMBER(H3:H)*ISNUMBER(F3:F);H3:H+F3:F;IFERROR(1/0)))
非常感谢…您的解决方案正在发挥作用…我仍在努力或尝试找人帮助开发脚本中的公式。此工作表的问题是许多用户都可以使用此工作表,任何人都可以删除公式。还有一种方法是使用整列引用,而不使用ArrayFormula wrap;与公式位于同一行的单元格将被删除自动被引用:.setFormula('=IF(ISNUMBER(H:H)*ISNUMBER(F:F);H:H+F:F;IFERROR(1/0));
我不知道。太酷了!感谢一切都很好!!!我使用了Mogsdad的脚本和来自AdamL的setFormula…非常感谢。。。。