我使用ImportRange
和Query
以及Join
和Split
的以下公式正常工作:
=join(" / ", QUERY(IMPORTRANGE("Google-Sheet-ID","RawData!A:AC"),"select Col25 where Col1 = " & JOIN(" OR Col1 = ", split(V2:V,"+")), 0))
此外,下面的ArrayFormula
和Split
函数运行正常:
=ARRAYFORMULA(if(len(V2:V)=0,,split(V2:V,"+")))
但是当我尝试使用以下公式将它们组合在一起时:
=ARRAYFORMULA(if(len(V2:V)=0,,join(" / ", QUERY(IMPORTRANGE("Google-Sheet-ID","RawData!A:AC"),"select Col25 where Col1 = " & JOIN(" OR Col1 = ", split(V2:V,"+")), 0))))
它失败了,并给了我以下错误:
错误 功能SPLIT参数1的值应为非空。
Here是我的测试表。
更新
我将其更改为:
=ARRAYFORMULA(if(len(C2:C)=0,,JOIN(" OR Col1 = ", ARRAYFORMULA(if(len(C2:C)=0,,split(C2:C,"+"))))))
所以我的完整公式是:
=ARRAYFORMULA(
if(
len(C2:C)=0,,
join(" / ",
QUERY(
IMPORTRANGE("14iNSavtvjRU0XipPWIMKyHNwXTA85P_CafFTsIPHI6c","RawData!A:AC"),"select Col25 where Col1 = " &
ARRAYFORMULA(
if(len(C2:C)=0,,
JOIN(" OR Col1 = ",
ARRAYFORMULA(
if(
len(C2:C)=0,,split(C2:C,"+")
)
)
)
)
),
0
))))
现在出现错误:
错误 JOIN范围必须是单行或单列。
答案 0 :(得分:1)
我相信这个称为MK的标签上的公式。测试会提取您想要的信息。
=QUERY(IMPORTRANGE("14iNSavtvjRU0XipPWIMKyHNwXTA85P_CafFTsIPHI6c","RawData!A:AC"),"select Col25 where Col1="&TEXTJOIN(" or Col1=",TRUE,A2:A))
我认为您可能过于复杂了?此公式仅构成要在查询中使用的货件ID中的文本字符串。可能会让您失望的一件事是,query()对于列中数据的类型而言非常具体。您的货件ID可以是数字,也可以是数字字母组合,但不能同时使用。也就是说,如果您有一些包含字母的货运ID,而另一些不包含字母的货运ID,则更难获得有效的查询。 (尽管并非不可能)。不过,为了帮助您,请务必以尽可能准确的方式将示例ID反映真实的ID。
答案 1 :(得分:0)
如何使用Apps Script执行此操作?您可以从Sheet2,货件ID和MK.Testing的ID中获取值,然后进行比较。如果它们一致,则将ETA复制到MK的C列中。测试:
function myFunction() {
var sprsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet2 = sprsheet.getSheetByName("Sheet2");
var mkTesting = sprsheet.getSheetByName("MK.Testing");
var shipmentId = sheet2.getRange("A2:A").getValues();
var idList = mkTesting.getRange("A2:A").getValues();
for (var i = 0; i < shipmentId.length; i++){
for (var j = 0; j < idList.length; j++){
if (idList[j][0] == ""){break;} //Stops if there is an empty cell in Mk.Testing's column A
if (idList[j][0] === shipmentId[i][0]){
var eta = sheet2.getRange("E"+(i+2)).getValue();
mkTesting.getRange("C"+(j+2)).setValue(eta);
}
}
}
}
参考: