Google Apps脚本 - 表格 - 脚本中的IF语句

时间:2018-05-30 14:56:32

标签: if-statement google-apps-script google-sheets

我有300,000个单元都使用相同的基本IF语句(上下复制/粘贴更新相应的行或列引用)。这用于填充甘特图,将列标题的日期值与同一行中的另一个单元格进行比较。根据找到的值,输出是一个字母,或者根本没有。

问题是,正如您可以想象的那样,性能 - 它非常慢。每当我在Sheet上做任何事情时,似乎每个IF语句都会被重新评估,而且性能非常差。

有没有办法在单元格中删除这个IF语句,并将其添加为函数,只在我想要更新甘特图时通过菜单调用它?

这是IF声明:

=IF($K2="N/A","",IF(AND(L$1>=$H2,L$1<=$I2),IF(ISBLANK($E2),"A",IF(ISBLANK($F2),"B",IF($G2="Crew","D","C"))),""))

我尝试了几种不同的方法,但是我很难理解如何在每个具有各自列和行引用的单元格中评估GAS中的单个输入公式?

// Adds a custom menu
function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Refresh Data')
  .addItem('Update Gantt', 'setIfForGantt')
  .addToUi();
}

// Set IF statement for Gantt chart
function setIfForGantt() {
  var sheetName = "Project Management";
  var range = "L:CW";

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
  var range = sheet.getRange(range);
  var values = range.getValues();
  var formula = ['IF($K2="N/A","",IF(AND(L$1>=$H2,L$1<=$I2),IF(ISBLANK($E2),"A",IF(ISBLANK($F2),"B",IF($G2="Crew","D","C"))),""))'];

0 个答案:

没有答案