Javascript 从公式中获取值时脚本不起作用

Javascript 从公式中获取值时脚本不起作用,javascript,google-apps-script,Javascript,Google Apps Script,我发现了这个脚本(如下所示),当只需在G列中键入数字0时,它就可以工作,但当G列的结果是减去E列和F列的值时,它就不起作用了。当值变为0时,它会保留在“默认”表中。任何帮助都将不胜感激。我已经搜索过了,但是没有找到任何关于这个如何应用于公式结果的信息。谢谢 函数onEdit(){ //在列中输入魔法值时,将行从一个工作表移动到另一个工作表 //调整以下变量以满足您的需要 //看https://productforums.google.com/d/topic/docs/ehoCZjFPBao/di

我发现了这个脚本(如下所示),当只需在G列中键入数字0时,它就可以工作,但当G列的结果是减去E列和F列的值时,它就不起作用了。当值变为0时,它会保留在“默认”表中。任何帮助都将不胜感激。我已经搜索过了,但是没有找到任何关于这个如何应用于公式结果的信息。谢谢

函数onEdit(){
//在列中输入魔法值时,将行从一个工作表移动到另一个工作表
//调整以下变量以满足您的需要
//看https://productforums.google.com/d/topic/docs/ehoCZjFPBao/discussion
var sheetnametwatch=“默认”;
var columnNumberToWatch=7;//列A=1、B=2等。
var valueToWatch=0;
var sheetnametomovetherowt=“toMoveTo”;
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheet=SpreadsheetApp.getActiveSheet();
var range=sheet.getActiveCell();
如果(sheet.getName()==sheetNameToWatch&&range.getColumn()==columnNumberToWatch&&range.getValue()==valueToWatch){
var targetSheet=ss.getSheetByName(sheetnametomovetherowt);
var targetRange=targetSheet.getRange(targetSheet.getLastRow()+1,1);
sheet.getRange(range.getRow(),1,1,sheet.getLastColumn()).moveTo(targetRange);
sheet.deleteRow(range.getRow());
}
}

脚本按预期工作。我用脚本创建了一个测试电子表格,并进行了以下测试:

  • 在A列中输入随机数-正如预期的那样,没有发生任何事情
  • 列A
    中输入0-如预期,未发生任何事件
  • 列G
    (7)中输入随机数-未发生任何情况
  • 列G
    中输入
    0
    -该行已移动到另一页
  • 列E
    F
    =E3-F3
    中输入
    5
    ,其等于
    0
    (按该顺序)-行移动到另一页
  • 列E
    中输入
    5
    ,在
    列F
    中输入
    4
    ,在
    列G
    中,我编写了公式
    =E3-F3
    ,结果是
    1
    。之后,我将
    F4
    更改为value
    5
    ,公式重新计算为
    0
    ——正如预期的那样,行未移动
  • 请确保公式实际返回的值为0。可能是您的单元格被格式化为将0.1写入0,并且公式返回一个不会移动的数字
    0
    ,因为它必须正好为0才能工作。如果要移动大于0但小于1的值,请针对读取的值引入
    Math.floor()


    在测试场景6中,我们必须注意,脚本不考虑对除
    G
    (列号
    7
    )以外的任何列所做的更改,因为您只在观看
    var range=sheet.getActiveCell()因此,如果您更改了除列以外的任何内容,而该列本应为
    0
    ,它将不会执行任何操作,因为以下
    if
    语句部分
    range.getColumn()==columnNumberToWatch

    添加公式和引用单元格的值。感谢您的输入。这是有道理的。您是否有一个建议,只要“查找”值并删除列中存在的行,而不管该值是否由用户键入?@Derk是的,您只需删除
    sheet.getName()==sheetnametwatch&&range.getColumn()==columnNumberToWatch
    部分位于
    if
    中,因为它仅限于该范围内的编辑,而不是
    var range=sheet.getActiveCell()
    您实际指定了期望值的位置
    0
    。如果在第7列的任何地方发生这种情况,那么您可能希望保留
    getActiveCell()
    ,但改为执行
    var row=range.getRow()
    ,然后执行
    range=sheet.getRange(row,columnNumberToWatch)
    这样,无论编辑哪一行,您都将检查该行的第7列