在onEdit()触发器中设置公式无法正常工作

时间:2019-08-10 21:01:06

标签: google-apps-script google-sheets

我有一个Google表格脚本,当用户尝试修改单元格时,该脚本应作为确认提示。

我已经使用过onEdit触发器并实现了它,以要求用户确认或取消修改。如果用户确认修改,则单元格将获得新值。如果没有,它将恢复其旧值。

除非单元格包含数据,否则所有方法都可以正常工作。然后,脚本没有将单元格恢复为其数据和公式,而是删除了公式,并向该单元格分配了一些垃圾值。

这是脚本:

function onEdit(e) {
  var ui = SpreadsheetApp.getUi(); 
  var text = e.oldValue; //backup text in cell value
  var cell = e.source.getActiveRange().getA1Notation(); //backup cell number
  var formula = SpreadsheetApp.getActive().getActiveSheet().getRange(cell).getFormulas(); //backup formulas

  var result = ui.alert(
    'Celula' + ' ' + cell + ' ' + 'a fost modificata!',
    'Confirmati modificarea?',
    ui.ButtonSet.YES_NO);

  // Process the user's response.
  if (result == ui.Button.YES) 
  {
    // User clicked "Yes".
    ui.alert('Modificare celula' + ' ' + cell + ' ' + 'efectuata');
  }

  else 
  {
    // User clicked "No" or X in the title bar.

    if(text==undefined)
    {
     SpreadsheetApp.getActive().getActiveSheet().getRange(cell).clearContent();
    }

    if(text!=undefined)
    {
     SpreadsheetApp.getActiveSheet().getRange(cell).setValue(text);
    }

    cell.setFormula(formula);
    ui.alert('Modificare celula' + ' ' + cell + ' ' + 'anulata');
  }

}

请注意,我已尝试在此行上支持单元格的公式:

var formula = SpreadsheetApp.getActive().getActiveSheet().getRange(cell).getFormulas(); //backup formulas

,然后在脚本的最后,如果用户取消修改,我试图将公式粘贴回单元格中:

cell.setFormula(formula);

但是,结果是上述结果。我希望我的语法有问题。我尝试了不同的方法,但是都没有用。请帮助我纠正此问题。谢谢。

1 个答案:

答案 0 :(得分:0)

我做了几件事来简化它,但是仍然有同样的问题。似乎在onEdit()触发器触发时,公式已经消失了。

function onEdit(e) {
  var ui = SpreadsheetApp.getUi(); 
  var text = e.oldValue; //backup text in cell value
  var cell = e.range.getA1Notation(); //backup cell number
  var formula = e.range.getFormula(); //backup formulas
  var result = ui.alert('Celula' + ' ' + cell + ' ' + 'a fost modificata!','Confirmati modificarea?',ui.ButtonSet.YES_NO);
  if (result == ui.Button.YES) {
    ui.alert('Modificare celula' + ' ' + cell + ' ' + 'efectuata');
  }else {
    if(text==undefined) {
      e.range.clearContent();
    }
    if(text!=undefined) {
      e.range.setValue(text);
    }
    cell.setFormula(formula);
    ui.alert('Modificare celula' + ' ' + cell + ' ' + 'anulata');
  }
}