如何在电子表格中插入两个日期的SUM结果

时间:2013-11-27 04:42:04

标签: google-apps-script google-sheets

如何从电子表格中的两个日期插入SUM的结果

数据:

  • H3:27/11/2013 1:31:00
  • F3:00:15
  • I3:应使用此公式=SUM(H3+F3)显示SUM(H3 + F3)的结果。结果为27/11/2013 1:49:00(24小时格式化)

的操作:

  1. 仅当某些人在第3行开始的第F列中插入值时才应执行。
  2. 只应对要修改的行执行。
  3. 应将结果插入第I列,即H + F
  4. 的总和

    这里我有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
    

    TEST:

    我尝试格式化此脚本Clic Here以对数据求和并将结果返回到dd / mm / yyyy hh:mm:ss但我没有幸运。

    为什么需要?:

    非常重要的是,这个公式尽快运行,因为我使用的是安排对全国各地的许多ISP的重要呼叫。

    我尝试使用=arrayformula(sum(h3+f3))但是没有用。我需要一个脚本,因为我一直在添加新的行。

    感谢您的帮助。

    最诚挚的问候,

1 个答案:

答案 0 :(得分:2)

Adam的公式的单行版本,例如第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);
...