Vlookup with split text by Google Appscript



我是Appscript新手,因此下面的任何帮助都将非常感谢。

我的查询类似于下面链接中发布的查询,然而,在这个问题中,工作是由自定义函数完成的,它的工作有点慢,每次编辑都运行。在自定义函数的地方,我想设计一个Appscript相同的运行在下拉菜单的变化。

链接到类似问题:

Google Appscript partial vlookup

电子表格示例链接。

https://docs.google.com/spreadsheets/d/1vI22QCmixKe3aoWMLODTFzt7pNXIKO3pjXS4mT6GHT0/edit gid = 0

如果有任何帮助,我将不胜感激。

我相信你的目标是这样的。

  • 当单元格的下拉列表"A1"";Sheet3"已更改为"刷新"

  • 您希望与下面的脚本获得相同的结果。

    function MYLOOKUP(data1, data2) {
    return data1
    .map(([rollNo_Name, value]) => {
    return (rollNo_Name !== '' && value === '') ?
    data2.find(([rollNo,]) => rollNo_Name.split('*')[0] == rollNo)[1] :
    ''
    });
    }
    

在这种情况下,如何使用OnEdit触发器的简单触发器?当这反映在示例电子表格中时,示例脚本如下:

示例脚本:

请将以下脚本复制粘贴到电子表格脚本编辑器中并保存。运行脚本时,请更改单元格"A1"下拉列表。";Sheet3"Refresh"帮助"。这样,脚本就运行了。

function onEdit(e) {
const sheetName = "Sheet3"; // This sheet name is from your Spreadsheet.
const { range, value, source } = e;
const sheet = range.getSheet();
if (sheet.getSheetName() != sheetName || range.getA1Notation() != "A1" || value != "Refresh") return;
const sheet1 = source.getSheetByName("Sheet1"); // This sheet name is from your Spreadsheet.
const sheet2 = source.getSheetByName("Sheet2"); // This sheet name is from your Spreadsheet.
const range1 = sheet1.getRange("A2:B" + sheet1.getLastRow());
const obj = sheet2.getRange("A2:B" + sheet2.getLastRow()).getValues().reduce((o, [a, b]) => (o[a] = b, o), {});
const values = range1.getValues().map(([a, b]) => {
const temp = obj[a.split("*")[0]];
return [temp && !b.toString() ? temp : null];
});
range1.offset(0, 2, values.length, 1).setValues(values);
range.setValue(null);
}
  • 在此脚本中,当单元格的下拉列表"A1";Sheet3"更改为"刷新",则运行脚本。并且,您的脚本得到了相同的结果。并将下拉列表的值改为null

  • 结果值放在"C"的"Sheet1"如果你想改变这个,请修改上面的脚本。

注意:

  • 在此脚本中,使用脚本编辑器直接运行onEdit函数时,出现错误。请小心点。

  • 在这个脚本中,为了搜索值,我使用了对象。这样,工艺成本可能会降低一点。

  • Updated: I reflectvalue in to be pulled only when there is no value in Column B.

引用:

  • 简单触发
  • reduce ()
  • map ()

最新更新