首页 > 解决方案 > 将电子邮件地址从一张表移动到另一张表的脚本

问题描述

我在弄清楚如何编写以下脚本时遇到问题:

1. I have a sheet tab_A:
Col_A, Col_B
URL_1, Email_1
URL_2, Email_2
URL_3, Email_3

1. I have a sheet tab_B:
Col_A, ..., Col_F
URL_3, empty
URL_1, empty
URL_2, empty

“...”表示包含数据的几列。

我需要一个脚本,在 tab_A 中逐行复制电子邮件地址,在 tab_B 中找到正确的行(相同的 URL)并将电子邮件粘贴到 Col F 中。

任何帮助表示赞赏。

标签: google-apps-scriptgoogle-sheets

解决方案


我相信你的目标如下。

  • 您想通过检查电子表格上的“tab_A”和“tab_B”的“A”列将“tab_A”的“B”列的值复制到“tab_B”的“F”列。
  • 例如,当第 1URL_1, Email_1行在“tab_A”上,而第 2 行在URL_1“tab_B”上时,您希望将 的值复制Email_1到“tab_B”的“F”列与同一行。

为了实现您的目标,我想提出以下流程。

  1. 从“tab_A”中检索值并创建一个对象以搜索“A”列的值。
  2. 创建一个用于将值放入“tab_B”的数组。
  3. 将值放入“tab_B”。

示例脚本:

请将以下脚本复制并粘贴到电子表格的脚本编辑器中并运行myFunction。通过这种方式,这些值被放入“tab_B”。在您使用它之前,请根据您的实际情况设置工作表名称。

function myFunction() {
  // 1. Retrieve values from "tab_A" and create an object for searching the value of the column "A".
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const tabA = ss.getSheetByName("tab_A");
  const sourceValues = tabA.getDataRange().getValues();
  const obj = sourceValues.reduce((o, [a, b]) => Object.assign(o, {[a]: b}), {});

  // 2. Create an array for putting values to "tab_B".
  const tabB = ss.getSheetByName("tab_B");
  const outputValues = tabB.getDataRange().getValues().map(r => [obj[r[0]] || ""]);

  // 3. Put the values to "tab_B".
  tabB.getRange(1, 6, outputValues.length, 1).setValues(outputValues);
}

笔记:

  • 当您想使用上述脚本作为自定义函数时,您还可以使用以下脚本。在这种情况下,请将自定义公式放入=SAMPLE(tab_A!A1:B, tab_B!A1:A)“tab_B”的单元格“F1”中。

      function SAMPLE(valuesOfTabA, valuesOfTabB) {
        const obj = valuesOfTabA.reduce((o, [a, b]) => Object.assign(o, {[a]: b}), {});
        return valuesOfTabB.map(r => [obj[r[0]] || ""]);
      }
    

参考:


推荐阅读