importrange 和 query 导入顺序是随机的,不低于彼此

Importrange & query import order is random and not below each other

我有一些问题,一段时间以来我一直在尝试解决这个问题,但我总是走入死胡同。

我在 DATA Sheet, each tap has 5000+ rows (in this example now way less), some rows have the same content and I want to find specific rows in my ArtikleFinder Sheet, 中进行了多次点击,同时输入了一个特定的数字,匹配的数字复制了那些匹配到不同 sheet B 的行,并保留 sheet 中的格式等] A.

示例:我需要制作一个 shipping/order 列表 我有 2 sheets Sheet A 充满了信息(我的库存),将选项卡与很多行相乘每个选项卡。在SheetB(newURL)我要过滤信息

比方说,我有 5000 篇文章分布在 Sheet A 的 5 个选项卡中,有人订购了 20 篇文章,所以我只想扫描某个数字或任何其他条件以 Sheet B,以及包含该数据的所有行,都将被导入。现在我有了一个全新的列表,只有20篇文章,我可以分享给客户

到目前为止,我使用 Importrange 和查询解决了这个问题,但它是有限的。我只能在1个查询中搜索3个条件,而且数据随机出现。

我必须使用 2 个不同的查询创建 2 个标签和代码,但相同的导入范围才能找到所有匹配的数据。

PKG-ID 和 BOL 查找器(第 2 和 3 列)

=QUERY({
IMPORTRANGE("1EO2dTznbgaWu1CCWl3OyAw54Zd3jtkhDuOgnal671KI", "MERGE 17.02. - 20.02!A:J");
IMPORTRANGE("1EO2dTznbgaWu1CCWl3OyAw54Zd3jtkhDuOgnal671KI", "MERGE 21.02 - 27.02!A:J");
IMPORTRANGE("1EO2dTznbgaWu1CCWl3OyAw54Zd3jtkhDuOgnal671KI", "MERGE 28.02 - 06.03!A:J")
}, "WHERE Col2 = '"&TEXTJOIN("' OR Col2 = '", TRUE, A:A)&"' OR Col3 like '"&TEXTJOIN("' OR Col3 like '", TRUE, A:A)&"'", 0)

ASIN、EAN、LPN 查找器(第 5 - 6 - 7 列)

注意:LPN(Col7) 需要是 CONTAINS 而不是 LIKE,因为我经常在一个单元格中有多个 LPN 号码,否则就找不到了

=QUERY({
IMPORTRANGE("1EO2dTznbgaWu1CCWl3OyAw54Zd3jtkhDuOgnal671KI", "MERGE 17.02. - 20.02!A:J");
IMPORTRANGE("1EO2dTznbgaWu1CCWl3OyAw54Zd3jtkhDuOgnal671KI", "MERGE 21.02 - 27.02!A:J");
IMPORTRANGE("1EO2dTznbgaWu1CCWl3OyAw54Zd3jtkhDuOgnal671KI", "MERGE 28.02 - 06.03!A:J")
}, "WHERE Col5 = '"&TEXTJOIN("' OR Col5 = '", TRUE, A:A)&"' OR Col6 like '"&TEXTJOIN("' OR Col6 like '", TRUE, A:A)&"' OR Col7 contains '"&TEXTJOIN("' OR Col7 contains '", TRUE, A:A)&"'", 0)

我想不通的是以下几点:

  1. 当扫描PKG-ID(例如)时,文章出现。在下一次扫描中,文章也出现在下方、上方或中间。我希望所有内容都显示在彼此下方,这样我就不必搜索新扫描来查看数字的含义。

  2. 我宁愿只点击一次而不是两次进行扫描。但是Query好像受限了,有解决办法吗?

  3. 如果它自动看到整个 sheet 和所有选项卡而不是每个选项卡,Importrange 也会更容易工作我必须放置一个新的“Importrange”

  4. 与此解决方案相关,我还需要另一个选项,仅导入特定行,这也可以通过查询解决,我只是想知道是否可以将其与上面也有问题?, "select Col1,Col2,Col6,Col7,Col8,Col15,Col16,Col17 where Col2 matches '"&TEXTJOIN("|", 1, A2:A)&"'", 0)

Importrange/Query 是否可能只缺少一些数字?

谢谢

#1

对于问题n°1,由于importrange和query将采用数据库的顺序,因此很难在本次扫描和查询结果之间获得相同的顺序。

我还希望之前的扫描已经拾取了一些行。

如果你想突出显示最后输入的扫描,你可以做的是使用像

这样的公式来顶层条件格式
=A1=index($A:$A,match("zzz",$A:$A,1))

#3

为了帮助您在公式中添加新标签,您可以通过一个小脚本刷新它,例如 PKG-ID,BOL:

function myFunction() {
  var id = '1EO2dTznbgaWu1CCWl3OyAw54Zd3jtkhDuOgnal671KI'
  var ss = SpreadsheetApp.openById(id)
  var rng = []
  ss.getSheets().forEach(sh => rng.push(`IMPORTRANGE("${id}", "${sh.getName()}!A:J")`))
  var formula = `=QUERY({${rng.join(';')}}, "WHERE Col2 = '"&TEXTJOIN("' OR Col2 = '", TRUE, A:A)&"' OR Col3 like '"&TEXTJOIN("' OR Col3 like '", TRUE, A:A)&"'", 0)`
  SpreadsheetApp.getActiveSpreadsheet().getSheetByName('PKG-ID, BOL').getRange('B3').setFormula(formula)
}

编辑

通过脚本

function artikleFinder() {
  var id = '1EO2dTznbgaWu1CCWl3OyAw54Zd3jtkhDuOgnal671KI'
  var source = SpreadsheetApp.openById(id)
  var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('TEST (script)')
  sh.getRange(3,2,sh.getLastRow(),sh.getLastColumn()).clearContent()
  var list = sh.getRange('A3:A').getValues().filter(r => r[0] != '').join().split(',')
  var data = []
  list.forEach(function (crit) {
    source.getSheets().forEach(function (sh) {
      var blankRow = Array.from({ length: 1 }, () => Array.from({ length: 10 }, () => ''))
      var prov = sh.getRange(1,1,sh.getLastRow(),10).getValues().filter(
        r => (r[1] == crit || r[2] == crit || r[4] == crit || r[5] == crit || r[6] == crit)
      )
      if (prov.length){
        data.push(prov)
        data.push(blankRow)
      }
    })
  })
  result = data.flat()
  sh.getRange(3,2,result.length,result[0].length).setValues(result)
}

结果将与 A 列中的列表顺序相同。但是,如果某行符合不同的条件,则该行将重复