【发布时间】:2020-02-17 03:59:29
【问题描述】:
我正在尝试组合一个函数,该函数允许我根据关键列将列的信息从一个工作表拉到另一个工作表。这类似于 excel/google 中的索引匹配或 vlookup。
样本数据:
我的尝试:
function vlookup(importFromSht, importToSht, importFromCompCol, importToCompCol,importFromCol, importToCol){
var lastImportFromRN = importFromSht.getLastRow();
var lastImportToRN = importToSht.getLastRow();
var importFromCompArr = importFromSht.getRange(2, importFromCompCol, lastImportFromRN, 1).getValues();
var importToCompArr = importToSht.getRange(2, importToCompCol, lastImportToRN, 1).getValues();
var importFromArr = importFromSht.getRange(2, importFromCol, lastImportFromRN, 1).getValues();
var importToArr = [];
for (var i in importToCompArr) {
for (var j in importFromCompArr){
if (importToCompArr[i].toString() == importFromCompArr[j].toString()) {
importToArr.push(importFromArr[j]);
}
}
}
//Paste to column
importToSht.getRange(2,importToCol,importToArr.length,1).setValues(importToArr);
}
定义的参数
- importFromSht - 我们从中获取值的工作表。
- importToSht - 工作表值将被复制到。
- importFromCompCol - 具有要匹配的值的列(数字)。
- importToCompCol - 具有要匹配的值的列(数字)。
- importFromCol - 包含需要复制的值的列(数字)。
- importToCol - 要将值复制到的列(数字)。
要求:
- 最少有超过 6K 行,可能还有数千行。执行速度很重要。我的方法是正确的方法还是有更有效的方法?我的脚本增加了大约 30 秒的执行时间。
- 愿意将其称为函数,因为我可以看到自己在此项目的其他领域和其他项目中使用它。
【问题讨论】:
-
importToArr.length可能是0。当它根本不起作用时,速度有多重要? -
@MartinZeitler 是的。这就是正在发生的事情,但我不确定我的代码哪里出错了。肯定有比赛。
-
@MartinZeitler 我补充说这是一项要求,因为我想确保我的方法是有效的,如果不是建议,将不胜感激。
-
不能将自定义函数命名为
vlookup,因为已经有一个具有该名称的内置函数。另请记住,自定义函数的最长执行时间为 30 秒。参考。 developers.google.com/apps-script/guides/sheets/functions。无论如何,如果您的脚本正在运行,那么问题在这里是题外话,但可以在 Code Review 中成为话题。 -
@Rub 不是自定义函数。他正试图从另一个函数调用它
标签: google-apps-script google-sheets google-sheets-formula