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