在另一个电子表格中查找匹配的单元格值并返回电子邮件地址



采购订单列表表包含PO#列表,我们只需要单元格A2中的前3个字符(我有这个工作)。在另一个电子表格"Active1"中,我们在列A中也有许多PO#,不包括标题,但我们也只想要前3个字符。PO# ' s的数据表范围为A2: a

当PO#匹配时,我如何获得数据表上匹配的单元格的电子邮件?我知道电子邮件地址在"Active1"的G列中,我如何才能使电子邮件地址在两个电子表格匹配后返回PO# ' s的前3个字符?

这是一个更新的版本。现在console。log中没有显示电子邮件。它是Emaildata.every()它没有显示电子邮件地址。

function main() {
var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(
"Purchase Orders List"
);
var po_numID = ss.getRange("A2").getDisplayValue().substr(0, 3); // Gets PO# the first 3 Characters of the PO
Logger.log(po_numID)
var emailDataSheet = SpreadsheetApp.openByUrl(
"https://docs.google.com/spreadsheets/d/1xIA3xcXrpjCPO8r3rzXuVWhu-ycUkN1iQzfYbpFFlFM/edit#gid=1768035929"
)
.getSheetByName("TestA");
var emailData = emailDataSheet
.getRange("A2:A")
.getDisplayValues()
.flat()
.map(po => po.substr(0,3));
emailData.every((po, index) => {
if (po == po_numID){
var email = emailDataSheet.getRange(index + 2,7).getValue();
Logger.log(email);
return false;
}
})
}

every()检查数组中的每个项是否通过测试并返回true || false,参见[docs][1]。因为你想要找到一个并根据其索引或列获取值,则需要使用另一种方法,我认为您的选择工具将是forEach(参见[docs][2])。基本上你的最后一个函数看起来像这样:

const testColumnNumber = 1 // column A
emailData.forEach( (record, index) => { 
if( record[testColumnNumber-1] == po_numID ){
var email = emailDataSheet.getRange(index+2, 7).getValue()
}
})
[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every
[2]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find

相关内容