Google apps script 当特定单元格具有特定值时触发宏时出现问题

Google apps script 当特定单元格具有特定值时触发宏时出现问题,google-apps-script,google-sheets,triggers,Google Apps Script,Google Sheets,Triggers,我正在尝试触发google sheet宏/应用程序脚本,以便在特定单元格中输入特定值时重新格式化工作表。我一直在努力让它工作,但没有成功 这是我的密码 function onEdit(e) { var spreadsheet = SpreadsheetApp.getActive(); var sheet = SpreadsheetApp.getActiveSheet(); var cell = sheet.getRange('C2'); var cellContent = cel

我正在尝试触发google sheet宏/应用程序脚本,以便在特定单元格中输入特定值时重新格式化工作表。我一直在努力让它工作,但没有成功

这是我的密码

function onEdit(e) {
  var spreadsheet = SpreadsheetApp.getActive();
  var sheet = SpreadsheetApp.getActiveSheet();
  var cell = sheet.getRange('C2');
  var cellContent = cell.getValue();

  if(cellContent === 'Past campaigns - actual cashflows to date only') {
    spreadsheet.getRange('7:12').activate();
    spreadsheet.getActiveSheet().hideRows(spreadsheet.getActiveRange().getRow(), spreadsheet.getActiveRange().getNumRows());
    spreadsheet.getRange('13:13').activate();
  }
};
我不熟悉宏和应用程序脚本。我已尝试执行以下链接中的所有建议,但没有成功


正如@Cooper所说,不能基于单元格值触发。仅限于用户更改

您可以尝试使仅在
if
语句中执行。但你已经这么做了

试试这个:

function onEdit(e) {
  e.source.toast('Entry');
  const sh=e.range.getSheet();  
  if(sh.getName()!='Sheet Name')return;//you need to change this sheetname
  const X=sh.getRange('C2').getValue();
  if(X=='Past campaigns - actual cashflows to date only') {
    e.source.toast('flag1');
    sh.hideRows(e.range.rowStart,e.range.rowEnd-e.range.rowStart+1);
  }
}
在大多数脚本中不必使用activate,当然在这个脚本中也不必使用activate,因为它必须在30秒内完成。它们在宏中使用activate,因为当您在屏幕上移动时,它们会跟踪您的操作。但是在一个脚本中,通常不想与屏幕进行太多的交互,因为它会减慢脚本的速度,并且不会真正完成任何事情

我目前正在使用一个在电子表格打开时运行的脚本,因为它有很多行,我想让它转到最后一行。所以激活很有用,因为我不必每次打开电子表格都向下滚动到最后一行

试着这样做:

function onEdit(e) {
  //e.source.toast('Entry');
  var sh=e.range.getSheet();  
  if(sh.getName()!='Sheet Name')return;//you need to change this sheetnamee
  var X=sh.getRange('C2').getValue();
  if(X=='Past campaigns - actual cashflows to date only') {
    //e.source.toast('flag1');
    sh.hideRows(e.range.rowStart,e.range.rowEnd-e.range.rowStart+1);
  }
}
我希望您不要试图从脚本编辑器运行此操作,因为这样做行不通


当用户更改某个值时请注意。嗨@Cooper-感谢参与进来。。。。。。。。。。。。。。。。。。。。。。。。。。。我仍然缺少一些明显的东西,所以我希望你能进一步帮助我。。。。。。。。。。。。。。。。。。。。。你强调“用户”。那么,你是在解释,因为我创建了应用程序脚本,所以我不是“用户”,因此当我做出更改时,它将不起作用-但如果我以外的人做出更改,它将起作用?Thanksedit仅在实际用户在标准google电子表格用户界面上编辑单元格时触发。Thanksede@Cooper-我尝试在标准google电子表格用户界面上与用户触发宏-它仍然不会触发-因此我认为脚本的问题在别处。。。我可能会尝试从另一个角度来应对这个挑战。。。谢谢你的帮助,我刚刚在我的网站上放了
e.source.toast('Entry')并进行编辑,它触发并显示了toast。所以你的脚本有问题。我不知道是否有其他人有这个问题,但似乎要花很长时间才能在V8模式下获取日志。我想我还是回到6缸原木吧。嗨,又来了,我试过了。非常感谢您的帮助,特别是关于不必要使用activate的建议。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。我无法让这个脚本为我运行,它对我来说太高级了,无法解包和优化它,所以它确实工作了-我找到了另一种方法来解决我的问题,通过构建触发脚本的自定义菜单。。。非常感谢您的帮助,您是否启用了V8引擎?此代码有效。在给你之前我已经测试过了。如果你不能让它工作,你就做错了。