If statement 谷歌应用程序脚本-表单-脚本中的IF语句

If statement 谷歌应用程序脚本-表单-脚本中的IF语句,if-statement,google-apps-script,google-sheets,If Statement,Google Apps Script,Google Sheets,我有300000个单元格,它们都使用相同的基本IF语句(反复复制/粘贴会更新相应的行或列引用)。这用于填充甘特图,将列标题的日期值与同一行中的另一个单元格进行比较。根据找到的值,输出是一个字母,或者根本没有 正如你所能想象的,问题在于性能——它非常缓慢。每当我在工作表上做任何事情时,似乎都会重新评估每个IF语句,并且性能非常差 是否有办法删除单元格中的IF语句,并将其作为函数添加,仅在需要更新甘特图时通过菜单调用它 以下是IF声明: =IF($K2="N/A","",IF(AND(L$1>

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

正如你所能想象的,问题在于性能——它非常缓慢。每当我在工作表上做任何事情时,似乎都会重新评估每个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"))),""))

=IF($K2=“N/A”、“”、IF(和(L $ 1>$H2,L $ 1,而不是使用脚本来设置公式来进行更新,考虑使用脚本来计算输出,使用公式。您将使公式适应于JavaScript数组的数组,就像由代码返回的一个返回的代码> ReaveGyValue,其中第一个索引是行,第二个索引是列。如果当前单元格是
(i,j)
,那么它的值是
值[i][j]
,而它的西北对角单元格的值是
值[i-1][j-1]
@tehhowch,这很有意义,我从来没有做过类似的事情,也不知道从哪里开始,一直在谷歌上搜索,一直在挣扎;)您有什么起点吗?至少需要读取查找值(A:K列)和列标题(第1行,L:CW列)。然后您可以使用嵌套的
for
循环来构建每一行,根据需要使用适当的
getValues()
数组引用外部索引(行索引)和内部索引(列索引)(例如,
$B2
查找[rowIndex][1]
L$1
标题[0][columnIndex]
// 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"))),""))'];