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)
    。结果是
    27/11/2013 1:49:00
    (24小时格式化)
行动:
  • 仅当某些人在第3行开始的F列中插入值时才应执行
  • 仅应为修改的行执行
  • 应在第I列中插入结果,即H+F之和
  • 这里我有1和2的开始脚本

    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…非常感谢。。。。