阻止Google App Scripts中的功能更新单元格编辑

时间:2018-01-12 05:19:27

标签: google-apps-script google-sheets

我试图将A列中32个名字的列表随机排序到B列,我发现这个公式是这样做的:

=sort('Sheet1'!A2:A33,arrayFormula(randbetween(sign(row('Sheet1'!A2:A33)),100)),true)

这很好用,但我希望能够使用B列中的新/随机列表在其他公式中使用。问题是,无论何时更新任何单元格(甚至在另一张纸上),列表都会重新随机化,从而阻止我使用随机列表中的任何单元格。

因此,我尝试将公式从其所在的单元格中取出并将公式放在菜单选项中,认为这会阻止工作表/单元格使用此Apps脚本进行更新:

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Custom Menu')
      .addItem('Menu1', 'menuOption')
      .addToUi();
}

function menuOption() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];

  var cell = sheet.getRange("B2");
  cell.setFormula("=sort('Sheet1'!A2:A32,arrayFormula(randbetween(sign(row('Sheet1'!A2:A33)),100)),true)");
}

但是无论何时编辑单元格,它仍然会重新随机化列B中的列表。运行时,是否可以只调用一次公式或应用脚本功能?

谢谢,

1 个答案:

答案 0 :(得分:1)

细胞内的公式会随着每次编辑而更新,对于您遇到的问题,您必须在电子表格的某个单元格内调用它。

您需要删除此调用,并且只能通过脚本界面或菜单按钮运行它。

如果您不介意浪费谷歌服务器资源,请在电子表格的某个位置设置一个布尔值,并在运行脚本的排序方面之前检查该值。