内部 For 循环未在 App 脚本中执行
Inner For Loop not executing in App Script
上下文
在 gsheets 的 google 应用程序脚本中,我正在 运行ning 这个函数,它在每行的单个单元格内搜索逗号分隔列表中的项目名称,对照项目名称列表和2 列中的 ID。
该函数在另一个函数中调用,该函数循环访问数据 Table 中的每一行数据。
目标是用逗号分隔列表中的 ID 替换名称。
问题
嵌套循环没有 运行!当我设置训练输出以测试代码被阻塞的位置时,它位于内部 for 循环,它在那一行中断并且根本不执行。我不明白为什么会这样,因为我看不出我的语法有问题。
请问我哪里可能出错了?
数据是这样的:
Item Directory Table:
Item ID | Item Name
--------------------
1234 | Item 1
46976 | Item 2
3526 | Item 3
32255 | Item 4
425 | Item 5
Data table:
Data Name | Items
--------------------
Row 1 | Item 1, Item 2, Item 5
Row 2 | Item 5, Item 2
Row 3 | Item 4
Row 4 |
Row 5 | Item 1
期望输出:
Row 1 = [1234, 46976, 425] // updated item 2
Row 2 = [425, 46976]
Row 3 = [32255]
Row 4 = []
Row 5 = [1234]
这是我的函数:
function findItems(x) {
var items = [];
var j = 0;
var i = 0;
var itemNames = Items.getRange(2 ,11).getValue().split(', ');
var itemIDs = Items.getRange(3 ,11).getValue().split(', ');
if (data.getRange(x, 6).getValue() != '') {
items = data.getRange(x, 6).getValue().split(', ');
for (i = 0; i < items.length; i++) {
output.getRange(2, 1).setValue(items[i]);
for (j = 0; j < itemNames.length; j++) {
if (items[i] === itemNames[j]) {
items[i] = itemIDs[j];
}
}
}
}
return items
}
我将在下面提供的是所有行的一次性 运行。随意修改以获得您预期的行为,您可以添加参数或调用函数作为公式来逐一填充单元格。
function findItems() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var lastRow = sheet.getLastRow();
var ids = sheet.getRange('A2:A' + lastRow).getValues().flat();
var names = sheet.getRange('B2:B' + lastRow).getValues().flat();
var data = sheet.getRange('C2:C' + lastRow).getValues().flat();
var items = sheet.getRange('D2:D' + lastRow).getValues();
items.forEach(function(item, count){
var elems = item[0].split(",");
for(var i = 0; i < elems.length; i++){
for(var j = 0; j < names.length; j++){
if(elems[i].trim() == names[j].trim()){
elems[i] = ids[j];
break;
}
}
}
// separated the formatting so you can easily modify here
// followed the formatting in your post
var output = data[count] + ' = [' + elems.join(', ') + ']';
sheet.getRange('E' + (count + 2)).setValue(output);
});
}
这是这段代码的预期输出。
如果您想要 return 某些东西,您可能需要修改上面的代码,因为这只会将字符串 output
设置为单元格的值。
逻辑很简单,但如果你有任何clarifications/questions,请随时在下面发表评论。
上下文
在 gsheets 的 google 应用程序脚本中,我正在 运行ning 这个函数,它在每行的单个单元格内搜索逗号分隔列表中的项目名称,对照项目名称列表和2 列中的 ID。
该函数在另一个函数中调用,该函数循环访问数据 Table 中的每一行数据。
目标是用逗号分隔列表中的 ID 替换名称。
问题
嵌套循环没有 运行!当我设置训练输出以测试代码被阻塞的位置时,它位于内部 for 循环,它在那一行中断并且根本不执行。我不明白为什么会这样,因为我看不出我的语法有问题。
请问我哪里可能出错了?
数据是这样的:
Item Directory Table:
Item ID | Item Name
--------------------
1234 | Item 1
46976 | Item 2
3526 | Item 3
32255 | Item 4
425 | Item 5
Data table:
Data Name | Items
--------------------
Row 1 | Item 1, Item 2, Item 5
Row 2 | Item 5, Item 2
Row 3 | Item 4
Row 4 |
Row 5 | Item 1
期望输出:
Row 1 = [1234, 46976, 425] // updated item 2
Row 2 = [425, 46976]
Row 3 = [32255]
Row 4 = []
Row 5 = [1234]
这是我的函数:
function findItems(x) {
var items = [];
var j = 0;
var i = 0;
var itemNames = Items.getRange(2 ,11).getValue().split(', ');
var itemIDs = Items.getRange(3 ,11).getValue().split(', ');
if (data.getRange(x, 6).getValue() != '') {
items = data.getRange(x, 6).getValue().split(', ');
for (i = 0; i < items.length; i++) {
output.getRange(2, 1).setValue(items[i]);
for (j = 0; j < itemNames.length; j++) {
if (items[i] === itemNames[j]) {
items[i] = itemIDs[j];
}
}
}
}
return items
}
我将在下面提供的是所有行的一次性 运行。随意修改以获得您预期的行为,您可以添加参数或调用函数作为公式来逐一填充单元格。
function findItems() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var lastRow = sheet.getLastRow();
var ids = sheet.getRange('A2:A' + lastRow).getValues().flat();
var names = sheet.getRange('B2:B' + lastRow).getValues().flat();
var data = sheet.getRange('C2:C' + lastRow).getValues().flat();
var items = sheet.getRange('D2:D' + lastRow).getValues();
items.forEach(function(item, count){
var elems = item[0].split(",");
for(var i = 0; i < elems.length; i++){
for(var j = 0; j < names.length; j++){
if(elems[i].trim() == names[j].trim()){
elems[i] = ids[j];
break;
}
}
}
// separated the formatting so you can easily modify here
// followed the formatting in your post
var output = data[count] + ' = [' + elems.join(', ') + ']';
sheet.getRange('E' + (count + 2)).setValue(output);
});
}
这是这段代码的预期输出。
如果您想要 return 某些东西,您可能需要修改上面的代码,因为这只会将字符串 output
设置为单元格的值。
逻辑很简单,但如果你有任何clarifications/questions,请随时在下面发表评论。