首页 > 解决方案 > 我的 setValue 在谷歌表格中不起作用

问题描述

e11当值不同于“MC ou CC”时,我试图将值设置为用户在提示中输入的值

我能够从提示中获取值并将其显示在中,logger.log但不知何故,该值并未传输到D11单元格。

Function onEdit(e) { 
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getSheetByName("Demande");
  if(s.getRange("E11").getValue() != "MC ou CC"){     
    var ui = SpreadsheetApp.getUi() ;
    var Bouton =   ui.prompt('Veuillez entrer le montant du paiement 
    mensuel', ui.ButtonSet.OK_CANCEL);
    var Reponse = Bouton.getResponseText();
    if (Bouton == ui.Button.OK) {
      Logger.log('The user clicked "OK" or the close button in the d 
      ialog\'s title  bar.'+Reponse);
      s.getRange("D11").setValue(Reponse);
    } else {
      Logger.log('The user clicked "No" or the close button in the 
      dialog\'s title  bar.'+Reponse);
    }
  }
 }

标签: google-apps-scriptgoogle-sheets

解决方案


问题:

您需要获取getSelectedButton()以找出用户单击了哪个按钮。

根据您的回答解决方案:

替换 if(Bouton == ui.Button.OK) if(Bouton.getSelectedButton() == ui.Button.OK)

function myFunction() { 
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getSheetByName("Demande");
  if(s.getRange("E11").getValue() != "MC ou CC"){     
    var ui = SpreadsheetApp.getUi() ;
    var Bouton =   ui.prompt('Veuillez entrer le montant du paiement mensuel', ui.ButtonSet.OK_CANCEL);
    var Reponse = Bouton.getResponseText();
    if (Bouton.getSelectedButton() == ui.Button.OK) {
      Logger.log('The user clicked "OK" or the close button in the dialog\'s title  bar.'+Reponse);
      s.getRange("D11").setValue(Reponse);
    } else {
      Logger.log('The user clicked "No" or the close button in the dialog\'s title  bar.'+Reponse);
    }
  }
 }

由于您手动执行此功能,因此无需使用onEdit触发器。相反,您可以使用常规函数,因此我更改了名称。如果您想onEdit正确使用触发器,请参阅下面的推荐答案。

推荐解决方案:

  • onEdit触发器和一般触发器函数不应该像您现在那样手动运行。
  • onEdit用户更改单元格的值时,触发器被激活。

利用事件对象

function onEdit(e) { 
  var ss = e.source;
  var s = ss.getActiveSheet();
  var rng = e.range;
  if(s.getName() == "Demande" && rng.getA1Notation()=='E11' && rng.getValue()!="MC ou CC"){    
    var ui = SpreadsheetApp.getUi();
    var Bouton =   ui.prompt('Veuillez entrer le montant du paiement mensuel', ui.ButtonSet.OK_CANCEL);
    var Reponse = Bouton.getResponseText();
    if (Bouton.getSelectedButton() == ui.Button.OK) {
      Logger.log('The user clicked "OK" or the close button in the dialog\'s title  bar.'+Reponse);
      s.getRange("D11").setValue(Reponse);
    } else {
      Logger.log('The user clicked "No" or the close button in the dialog\'s title  bar.'+Reponse);
    }
  }
 }

当心:

  • 此解决方案使用事件对象onEdit,这是使用触发器的推荐方式。如果您手动执行该功能,这将不起作用。只有当用户更改单元格的值时,它才会起作用。

  • 它假定您只想在编辑工作表if中单元格的值时执行主要条件内的代码。因此,它仅在您编辑.'E11'"Demande"'E11'"Demande"

如果您想要不同的行为,请告诉我,我会相应地修改代码。


推荐阅读