基本Google表单公式脚本

时间:2013-11-08 17:38:32

标签: google-apps-script google-sheets

G栏:=if(and(E2<>"",F2=""),"Running","")

H栏:=Mod(E2, 1)

第一栏:=Mod(F2, 1)

J栏:=if(F2="","",I2-H2)

我在上述列的每个单元格中使用上面的公式作为公式,但我无法保护表格所有者自己的G,H,I和J列。或者我呢?

我的解决方案是创建一个脚本来执行这些功能。有关如何做到这一点的任何帮助?

我能够通过以下方式解决第一个问题G列:

function onEdit() {
  var s = SpreadsheetApp.getActiveSheet();
  if( s.getName() == "Timesheet" ) { //checks that we're on the correct sheet
    var r = s.getActiveCell();
       if( r.getColumn() == 1 ) { //checks the column
      var nextCell = r.offset(0, 6);
       if( nextCell.getValue() != '' ) //is not empty?
         nextCell.setValue("");
      else if( nextCell.getValue() === '' ) //is empty?
        nextCell.setValue("Running");
      else nextCell.setValue("");
      if( r.getColumn() == 1 )  //checks the column
      var nextCell = r.offset(-1, 6);
        if( nextCell.getValue() != '' ) //is empty?
          nextCell.setValue("");
    }
  }
}
}

1 个答案:

答案 0 :(得分:0)

简短回答

而不是&#34;重新发明轮子&#34;使用脚本添加不应更改的公式。

解释

以下脚本将覆盖H,I,J和H列中的单元格。如果有任何用户更改它,则来自第2行的K和相应的公式。请注意,使用R1C1表示法而不是A1。

function onEdit(e) {
  var range = e.range;
  var col = range.getColumn();
  if (col >= 7 && col <= 10) {
    var row = range.getRow();
    if (row > 1) {
      switch (col) {
        case 7: // Column H
          range.setFormulaR1C1('=if(and(R[0]C[-2]<>"",R[0]C[-1]=""),"Running","")');
          break;
        case 8: // Column I
          range.setFormulaR1C1('=Mod(R[0]C[-3], 1)');
          break;
        case 9: // Column J
          range.setFormulaR1C1('=Mod(R[0]C[-3], 1)');
          break;
        case 10: // Column K
          range.setFormulaR1C1('=if(R[0]C[-4]="","",R[0]C[-2]-R[0]C[-1])');
          break;
      }
    }
  }
}