如何根据条件将单元格值复制到另一个工作表(Apps 脚本)

时间:2021-03-31 14:22:03

标签: google-apps-script google-sheets

我正在尝试编写一些 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

1 个答案:

答案 0 :(得分:0)

您的代码中有很多问题,我决定对其进行优化。如果需要,请随意修改代码。

问题:

  • rangeemails 可以一起提取而不是单独提取
  • 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("@"))]);
  });
}

示例数据:

sample data

示例输出:

sample output

相关问题