我的Google App脚本当前存在一些问题。
我们现在所拥有的是:当用户在该列中输入两个值(时间)时,该列之间的持续时间将自动在另一列中计算出来,这是我们通过电子表格本身中的函数完成的。
当我们传递输入值时,我们使用的是函数appendRow,由于事情会在该列中弄乱,我们将应该在duration列中输入的值设置为null,以便将其填充为空白并且电子表格本身中的函数将对其进行计算。但是,我们遇到的问题是,通过在电子表格中使用此函数,我们在没有时间输入的每一行中获得默认值00:00,这意味着appendRow函数会将这些行检测为已填充,并将这些值附加到电子表格的最底部,从而在有值和无值的行之间造成很大的差距。
我们需要一个解决方案来解决此问题,我们正在发布以获取有关此问题的所有可能解决方案。
因此,我们想到的用于解决此问题的方法是使用getRange(),然后使用setValue。通过使用getRange,我们考虑使用类似于制作1x1网格的方法,该网格的行索引与要导入值的特定列中的新单元格的行索引相同。对于列,我们可以选择列索引。但是我们很快意识到这仍然会失败,因为行索引中的appendRow仍将返回电子表格中最后一行的行索引。
我们尝试的下一个方法是在duration列中检测到任何“ 0:00:00”,然后获取相应的行Index,然后使用该行Index通过getRange()在该特定行上对setValue进行设置,失败。
for (var i = 0; i < sheet.getMaxRows()+1; i++ ){
if (sheet.getRange(i,4).getValue() === "0:00:00") {
sheet.getRange(i,1).setValue(datas.enterDate);
sheet.getRange(i,2).setValue(datas.enterStartTime);
sheet.getRange(i,3).setValue(datas.enterEndTime);
sheet.getRange(i,6).setValue(datas.enterFullName);
sheet.getRange(i,7).setValue(datas.enterCategory);
sheet.getRange(i,8).setValue(datas.enterActivity);
sheet.getRange(i,9).setValue(datas.enterLink);
break;
}
}
预期结果:当函数在该列中向下移动时,它将搜索包含“ 0:00:00”的所有单元格,并且在执行该操作时,它将使用用户数据设置值。
输出:未显示任何内容。
答案 0 :(得分:0)
尝试一下:
col是列号。默认值为活动单元格的列 sh是一个工作表对象,默认是当前活动工作表 ss是电子表格对象,默认值为当前活动的电子表格。
function newestRow(col,sh,ss){
var ss=ss || SpreadsheetApp.getActive();
var sh=sh || ss.getActiveSheet();
var col=col || sh.getActiveCell().getColumn();
var rg=sh.getRange(1,col,sh.getLastRow(),1);
var vA=rg.getValues();
while(vA[vA.length-1][0].length==0){
vA.splice(vA.length-1,1);
}
return vA.length+1;
}