-1

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("");
    }
  }
}
}
4

1 回答 1

0

简短的回答

而不是“重新发明轮子”,而是使用脚本来添加不应更改的公式。

解释

如果任何用户更改了第 2 行中的 H、I、J 和 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;
      }
    }
  }
}
于 2016-01-22T21:53:50.990 回答