Google Apps脚本:如何从列表中搜索某些列并将文本返回到另一列

时间:2017-05-10 17:06:02

标签: javascript google-apps-script google-sheets

我在一列(A)中有产品说明,并希望根据说明中的内容在另一列(B)中创建标签。

我在C1中有一个以前的标签列表。我想比较A列中的内容与C1中的内容,然后仅返回已匹配的单词。

因此,在下图中,进行了比较并找到了匹配项并将其添加到B列。

enter image description here

我尝试过一些事情,但失败了。我最初认为它可以使用脚本将描述复制到B列,在所有单词之间添加逗号,然后搜索并替换特定的单词组合。但我意识到我必须定义1000个条件(比如不包括'是'等)

任何指向正确方向的人都会受到赞赏。

2 个答案:

答案 0 :(得分:2)

我认为这样做会。

function findingWords()
{
  var criteriaRowIndex = 1, criteriaColIndex = 2;//indexes in rngA are just row and column numbers -1
  var descriptionColIndex = 0;
  var tagsFoundColIndex = 1
  var sht = SpreadsheetApp.getActiveSheet();
  var rng = sht.getDataRange();
  var rngA = rng.getValues();
  var criteriaA = String(rngA[criteriaRowIndex][criteriaColIndex]).split(',');
  for(var i=1;i<rngA.length;i++)
  {
    var strA = String(rngA[i][descriptionColIndex]).split(' ');
    var tagA = [];
    for(var j=0;j<criteriaA.length;j++)
    {
      if(strA.indexOf(criteriaA[j]) != -1)
      {
        tagA.push(criteriaA[j]);
      }
    }
    rngA[i][tagsFoundColIndex]=tagA.join();
  }
  rng.setValues(rngA);
}

enter image description here

我添加了一些中间变量来帮助您识别行和列。但基本上,行,列从1开始,并且使用getValues()创建的数组中的索引从零开始。所以一般来说,索引是行数和列数减一。

答案 1 :(得分:1)

您可以尝试使用图纸公式。

我刚刚将它拼凑在一起,所以可能有一种更优化的方法来做到这一点,但这应该有效。

创建一个包含“产品描述”和“找到标记”列(Sheet1)的双列工作表。另外,创建一个单列工作表,其中包含要测试的所有标记的列表,每行只有一个标记(Sheet2)。

这里是指向您需要的布局的样本表的链接:

SAMPLE SPREADSHEET

然后在表1中,根据需要将以下公式放入B列中的多个单元格中(从B2开始):

=REGEXREPLACE(TRIM(ARRAYFORMULA(JOIN(" ",IFERROR(REGEXEXTRACT(INDIRECT("A"&ROW()),Sheet2!A2:A))))), "\s+", ",")