使用 REGEXREPLACE/REGEXMATCH 函数导入范围

问题描述 投票:0回答:2

我有与书籍产品代码相关的虚拟数据:

XXX AAA BB 文档代码 测试类型
P01 01 BK-001-CR 1.内容质量测试
   - 校对
   - 事实核查
   - 最终编辑
2.设计和布局测试
P01 02 BK-002-CR 1.物理生产测试
2。分布测试
P02 哦哦 01 BK-001-CR 1.内容质量测试
   - 校对
   - 事实核查
   - 最终编辑
2.设计和布局测试
P03 01 BK-001-RT 1.内容质量测试
   - 校对
   - 事实核查
   - 最终编辑
2.设计和布局测试

此链接中列出。

我想将其清理为预期输出,如下所示:

产品代码 文档代码 测试类型
P01.BOO.01
P02.OOK.01
BK-001-CR 内容质量测试
   - 校对
   - 事实核查
   - 最终编辑
P01.BOO.01
P02.OOK.01
BK-001-CR 设计和布局测试
P01.BOO.02 BK-002-CR 物理生产测试
P01.BOO.02 BK-002-CR 分布测试
P03.KOO.01 BK-001-RT 内容质量测试
   - 校对
   - 事实核查
   - 最终编辑
P03.KOO.01 BK-001-RT 设计和布局测试

此链接中列出。

对于输出,我尝试使用产品代码列中的公式:

=ARRAYFORMULA( 
  TEXTJOIN(" "; TRUE; 
    FILTER(
      IMPORTRANGE("https://docs.google.com/spreadsheets/d/1dIVsBszYwQnELHwu8C7BaamZnQTz2zogzKlrkq72IZQ/edit?gid=0#gid=0"; "Test!B2:B5") & "." & 
      IMPORTRANGE("https://docs.google.com/spreadsheets/d/1dIVsBszYwQnELHwu8C7BaamZnQTz2zogzKlrkq72IZQ/edit?gid=0#gid=0"; "Test!C2:C5") & "." &
      IMPORTRANGE("https://docs.google.com/spreadsheets/d/1dIVsBszYwQnELHwu8C7BaamZnQTz2zogzKlrkq72IZQ/edit?gid=0#gid=0"; "Test!D2:D5"); 
      (REGEXMATCH(IMPORTRANGE("https://docs.google.com/spreadsheets/d/1dIVsBszYwQnELHwu8C7BaamZnQTz2zogzKlrkq72IZQ/edit?gid=0#gid=0"; "Test!F2:F5"); I2) + 
      REGEXMATCH(IMPORTRANGE("https://docs.google.com/spreadsheets/d/1dIVsBszYwQnELHwu8C7BaamZnQTz2zogzKlrkq72IZQ/edit?gid=0#gid=0"; "Test!B2:B5"); H2)) > 0
    )
  )
)

在文档代码栏中:

=QUERY(IMPORTRANGE("https://docs.google.com/spreadsheets/d/1dIVsBszYwQnELHwu8C7BaamZnQTz2zogzKlrkq72IZQ/edit?gid=0#gid=0"; "Test!E2:F5"); "SELECT Col1 WHERE Col2 CONTAINS '" & I2 & "'")

在测试类型栏中:

=ARRAYFORMULA(
  UNIQUE(
    FILTER(
      TRIM(
        FLATTEN(
          SPLIT(
            REGEXREPLACE(
              IMPORTRANGE("https://docs.google.com/spreadsheets/d/1dIVsBszYwQnELHwu8C7BaamZnQTz2zogzKlrkq72IZQ/edit?gid=0#gid=0"; "Test!F2:F5"); 
              "\d+\."; 
              "~"
            ); 
            "~"
          )
        )
      ); 
      (TRIM(FLATTEN(SPLIT(REGEXREPLACE(IMPORTRANGE("https://docs.google.com/spreadsheets/d/1dIVsBszYwQnELHwu8C7BaamZnQTz2zogzKlrkq72IZQ/edit?gid=0#gid=0"; "Test!F2:F5"); "\d+\."; "~"); "~"))) <> "")
    )
  )
)

但是仍然有错误,仍然与预期的输出不符。 enter image description here

还有其他公式吗?

regex google-sheets google-sheets-formula
2个回答
2
投票

以下是您可以相应调整的通用方法:

=let(Λ;importrange("1dIVsBszYwQnELHwu8C7BaamZnQTz2zogzKlrkq72IZQ";"B2:F7");Σ;lambda(x;choosecols(Λ;x));a;Σ(1);b;Σ(2);c;Σ(3);d;Σ(4);e;Σ(5);
 reduce(tocol(;1);unique(tocol(d;1));lambda(x;y;vstack(x;reduce(tocol(;1);sequence(max(index(ifna(--regexextract(split(xlookup(y;d;e);char(10));"^\d+")))));lambda(f;q;vstack(f;
 hstack(join(char(10);filter(a&"."&b&"."&c;d=y));y;regexextract(xlookup(y;d;e);"(?s).*"&q&". (.*?)(?:\n"&q+1&". |$)")))))))))

enter image description here


1
投票

您也可以尝试这个数组公式:

=ArrayFormula(LET(url,"https://docs.google.com/spreadsheets/d/1mNDf04c51ucs5NOSQG3CRVRdlyQnJ2AvmmIvuIO0FU0/",
              refProdCode,"'Test'!B2:D5",
              refDocCode,"'Test'!E2:E5",
              refTestType,"'Test'!F2:F5",
              prodCode_data,IMPORTRANGE(url,refProdCode),
              docCode_data,IMPORTRANGE(url,refDocCode),
              testType_data,IMPORTRANGE(url,refTestType),
              prodCode,TRANSPOSE(REGEXREPLACE(TRIM(QUERY(TRANSPOSE(prodCode_data),,9^9))," ",".")),
              testType_split,SPLIT(REGEXREPLACE(testType_data,"[0-9]*\.","#"),"#"),
              concatAll,prodCode&"@"&docCode_data&"#"&testType_split,
              breakdown,SPLIT(FLATTEN(concatAll),"@"),
              initialSummary,QUERY(breakdown,"SELECT Col1,MIN(Col1) GROUP BY Col1 PIVOT Col2 LABEL MIN(Col1) ''",0),
              getHeader,CHOOSEROWS(initialSummary,1),
              getBody,QUERY(initialSummary,"OFFSET 1"),
              concatBody,REGEXREPLACE(TRIM(QUERY(getBody,,9^9))," ",CHAR(10)),
              finalProdDocCodes,SPLIT(TRANSPOSE(getHeader),"#"),
              final,QUERY(HSTACK(TRANSPOSE(concatBody),finalProdDocCodes),"ORDER BY Col1,Col2 OFFSET 1",0),
              final)

enter image description here

确保替换网址和引用。

© www.soinside.com 2019 - 2024. All rights reserved.