Javascript 从公式中获取值时脚本不起作用
我发现了这个脚本(如下所示),当只需在G列中键入数字0时,它就可以工作,但当G列的结果是减去E列和F列的值时,它就不起作用了。当值变为0时,它会保留在“默认”表中。任何帮助都将不胜感激。我已经搜索过了,但是没有找到任何关于这个如何应用于公式结果的信息。谢谢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
函数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
中输入0-如预期,未发生任何事件列G
(7)中输入随机数-未发生任何情况列G
中输入0
-该行已移动到另一页列E
和F
和=E3-F3
中输入5
,其等于0
(按该顺序)-行移动到另一页列E
中输入5
,在列F
中输入4
,在列G
中,我编写了公式=E3-F3
,结果是1
。之后,我将F4
更改为value5
,公式重新计算为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列