Google apps script 将查询结果限制为2个Google Sheets/Google Apps脚本

Google apps script 将查询结果限制为2个Google Sheets/Google Apps脚本,google-apps-script,google-sheets,google-sheets-formula,Google Apps Script,Google Sheets,Google Sheets Formula,问题已更新以澄清 我已按预期运行以下公式。但是,我想将A2:C中的结果限制为找到的每个SKU中的2个。下表有A11134,其中有4个结果,但我只想看到前2个。所以我会看到(A11134 E01D1 48)和(A11134 F06C2 48) 提前感谢新答案 好的,在这种情况下,我建议使用脚本获取您想要的SKU。 首先,使用此函数过滤O coulmn并获得匹配集。此集合将包含一个最初设置为0的计数器 function GetNSKUS() { var ss =SpreadsheetApp.g

问题已更新以澄清

我已按预期运行以下公式。但是,我想将A2:C中的结果限制为找到的每个SKU中的2个。下表有A11134,其中有4个结果,但我只想看到前2个。所以我会看到(A11134 E01D1 48)和(A11134 F06C2 48)

提前感谢

新答案 好的,在这种情况下,我建议使用脚本获取您想要的SKU。 首先,使用此函数过滤O coulmn并获得匹配集。此集合将包含一个最初设置为0的计数器

function GetNSKUS() {
  var ss =SpreadsheetApp.getActive();
  var sheet = ss.getSheetByName('PrepSheet');
  //Building the matching set.
  var matchingValues = ss.getRange("O2:O").getValues().filter(value => value[0] != '').map(nonBlankValue => [nonBlankValue[0], 0]);
  //Filtering out the desired number of values
  var values = sheet.getRange("LOCATIONS!$A$2:$C").getValues().filter(value => advancedFilter(value[0], matchingValues));

  let cols = values[0].length;
  let rows = values.length;
  //Printing out the found rows starting from G2
  sheet.getRange(2, 7, rows, cols).setValues(values);

}
然后,您将使用此功能过滤位置表范围。匹配完成后,计数器将递增,允许您过滤到所需的值

function advancedFilter(value, toMatch) {
  let matched = toMatch.filter(couple => couple[0] === value);
  if (matched.length > 0) {
    if (matched[0][1]<2) { //Here you can decide when to stop returning SKUs
      matched[0][1] += 1;
      return true;
    }
  }
  return false;
}

参考资料: 限制

新答案 好的,在这种情况下,我建议使用脚本获取您想要的SKU。 首先,使用此函数过滤O coulmn并获得匹配集。此集合将包含一个最初设置为0的计数器

function GetNSKUS() {
  var ss =SpreadsheetApp.getActive();
  var sheet = ss.getSheetByName('PrepSheet');
  //Building the matching set.
  var matchingValues = ss.getRange("O2:O").getValues().filter(value => value[0] != '').map(nonBlankValue => [nonBlankValue[0], 0]);
  //Filtering out the desired number of values
  var values = sheet.getRange("LOCATIONS!$A$2:$C").getValues().filter(value => advancedFilter(value[0], matchingValues));

  let cols = values[0].length;
  let rows = values.length;
  //Printing out the found rows starting from G2
  sheet.getRange(2, 7, rows, cols).setValues(values);

}
然后,您将使用此功能过滤位置表范围。匹配完成后,计数器将递增,允许您过滤到所需的值

function advancedFilter(value, toMatch) {
  let matched = toMatch.filter(couple => couple[0] === value);
  if (matched.length > 0) {
    if (matched[0][1]<2) { //Here you can decide when to stop returning SKUs
      matched[0][1] += 1;
      return true;
    }
  }
  return false;
}

参考资料:
Limit

Hi Alessandro-我的出口产品最多可以有50个SKU,它们可能位于5个不同的位置。我只想看到每个sku的前2个位置。LIMIT只给了我2个结果-这是我不想要的。Alessandro-问题已经更新得更清楚了O列怎么样,它能有重复值吗?嗨Alessandro-O列-没有重复值。列G将有重复的值,它的此列我只需要前2个结果Hi Alessandro-工作完美非常感谢Hi Alessandro-我的出口最多可以有50个SKU&它们可能位于5个不同的位置。我只想看到每个sku的前2个位置。LIMIT只给了我2个结果-这是我不想要的。Alessandro-问题已经更新得更清楚了O列怎么样,它能有重复值吗?嗨Alessandro-O列-没有重复值。列G将有重复的值和它的这个列我只需要有前2个结果希亚历山德罗-工作完美,非常感谢