我正在尝试编写一些 Apps 脚本,以仅将与一系列公司匹配的电子邮件地址提取到另一个工作表中进行处理。这也应该删除@company.com 扩展名,只留下用户名。
在工作表 1 上:
在E列中,我们在标题下有公司名称:“公司”
在 D 列中,我们在标题下有电子邮件地址:“电子邮件”
在工作表 2 上:
在A列中,我们需要Header下的Username结果:“Username”
目前应该有 2 个结果的以下脚本返回: this
在我失去理智时,我将非常感谢您对此的任何帮助。
谢谢!
function pullUsernames() {
//Get Sheet1
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Sheet1");
//Set Values for Search
var valuesToWatch = ['Company1','Company2'];
var range = sheet.getRange(2,5,sheet.getLastRow()-1).getValues();
var emails = sheet.getRange(2,4,lr-1).getValues();
//For Loop to match values, etc.
for(var i=0; i < range.length; i++){
if(valuesToWatch.indexOf(range[i][0])){;
var targetSS = SpreadsheetApp.openById("1hpIIgkXMgrlOfYqfS4A3ro8BFQB02dAy5G40Y7vUI2c").getSheetByName("Sheet2");
var targetRange = targetSS.getRange(i+1,1,targetSS.getLastRow(),1);
var usernames = String(emails[i][0]).replace("@company.com", "")
targetRange.setValue(usernames[i][0]);
} //if
} //for
} //Function
答案 0 :(得分:0)
您的代码中有很多问题,我决定对其进行优化。如果需要,请随意修改代码。
range
和 emails
可以一起提取而不是单独提取targetSS
带入循环之外,因为它只是基于您的问题的静态getRange
,我假设您想在最后一行附加用户名?如果是这样,请改用 appendRow
。array index
,所以我使用 includes
来检查数据是否在 valuesToWatch
中。email
字符串操作非常硬编码,因此我用更好的解决方案替换了它,删除了除 @
之前的字符之外的任何内容。function pullUsernames() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Sheet1");
// update your targetSS, made it under same ss for easier testing
var targetSS = ss.getSheetByName("Sheet2");
// set values for search
var valuesToWatch = ['Company1', 'Company2'];
// get email and company columns in one go
var data = sheet.getRange(2, 4, sheet.getLastRow() - 1, 2).getValues();
// each row of data contains email and company formatted as [email, company].
data.forEach(function ([email, company]){
if(valuesToWatch.includes(company))
// remove anything from @ onwards from email and append at last row
targetSS.appendRow([email.substring(0, email.lastIndexOf("@"))]);
});
}