Google Apps 脚本(Google Sheet)的 JavaScript 逻辑未按预期工作

问题描述 投票:0回答:1

我有一个谷歌工作表,我正在尝试搜索、匹配,然后自动填充一些数据。

这是 google 工作表布局
这是 查找表布局

我编写了一些 JavaScript 代码来尝试在单元格 A2 中搜索关键字,将其与查找表中的值进行匹配,获取相应的数据,然后将其填充到关键字下方 1 行和右侧 1 列。它应该重复检查 A 列中的每 7 个单元格,直到没有更多单元格为止。目前,我的代码适用于第一个关键字,然后为其余关键字输入了错误的数据。

function FindItemAndPopulate() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Item Autofill");
  var keywordRange = sheet.getRange("A2:A");
  var keywords = keywordRange.getValues();
  var lastRowA = sheet.getLastRow();

  for (var i = 0; i < keywords.length; i += 7) { // Increment by 7 to check every 7th row
    var keyword = keywords[i][0];

    if (keyword !== "") {
      var searchData = sheet.getRange("M2:M" + lastRowA).getValues();
      var rowIndex = -1;

      for (var j = 0; j < searchData.length; j++) {
        if (searchData[j][0] === keyword) {
          rowIndex = j + 2; // Adjust index for row offset due to starting from row 2
          break;
        }
      }

      if (rowIndex !== -1) {
        var rowData = sheet.getRange(rowIndex, 14, 1, 5).getValues(); // Get data from columns N to R
        var valuesToPopulate = [];

        for (var k = 0; k < rowData[0].length; k++) {
          valuesToPopulate.push([rowData[0][k] !== "" ? rowData[0][k] : ""]);
        }

        sheet.getRange(rowIndex + 1, 2, 1, 5).setValues([valuesToPopulate]); // Populate data into the next row and 1 column right
      } else {
        sheet.getRange("B" + (i + 2) + ":F" + (i + 2)).clearContent(); // Clear corresponding row if no match found
      }
    } else {
      sheet.getRange("B" + (i + 2) + ":F" + (i + 2)).clearContent(); // Clear corresponding row if keyword is empty
    }
  }
}

我相信我在某个地方犯了一个错误,关键字的索引不在正确的范围内或没有正确更新,但我不知道在哪里。任何帮助将不胜感激。

这是代码的结果照片

感谢您的帮助和耐心。

按要求编辑:
这是 谷歌文档的链接 注意:相关页面的标题是 “项目自动填充”

这是预期的输出,其中相关部分突出显示(其余部分在其他地方处理)

我还包含了一个名为“预期输出”的选项卡,它显示了代码运行后表格的外观 - 红色文本是我发布的代码管理的部分,其余部分在其他地方处理,因此仅关注红色零件

javascript google-sheets google-apps-script
1个回答
0
投票

我认为,如果你像这样调整

rowIndex = j + 2; 
,那么这个比较
if (rowIndex !== -1) {
必须更改为
if(rowIndex !== 1
,但如果不了解你想要实现的目标,我就无法再进一步了。

© www.soinside.com 2019 - 2024. All rights reserved.