Google脚本在两个工作表之间匹配一个单元格并在第二个工作表中更新一个单元格

时间:2019-07-03 18:21:29

标签: google-apps-script

在sheet1中,我具有在单元格A2和单元格B2中更新的数据。更新它们后,我想运行一个脚本,该脚本将A2中的值与另一个工作表中的Q列相匹配,当找到匹配项时,使用sheet1中单元格B2中的数据更新R列中的相关行。我发现的所有变体都希望移动整行或没有用。我是Script的初学者,因为我已经使用VBA多年了,而且似乎只有模糊的相似之处。

1 个答案:

答案 0 :(得分:0)

像这样吗?

function onSheetEdit(e)
{
  // get the source range that was edited
  var sourceRange = e.range;

  // get the associated sheet
  var sourceSheet = sourceRange.getSheet();

  // get the sheet name
  var sourceSheetName = sourceSheet.getName();

  if(sourceSheetName == "Sheet1")
  {
    // if the range edited was one we carea bout
    if(sourceRange.getA1Notation() == "A2" || sourceRange.getA1Notation() == "B2")
    {

      // get the values
      var values = sourceSheet.getRange("A2:B2").getDisplayValues()[0];

      // open the destination sheet
      var destinationSheet = SpreadsheetApp.openById("1ldtZdDiml01_Drlp2WvZ3CaSgABoubauok3BcVq11eI").getSheetByName("Sheet1");

      // find the column number of the column we're going to look against
      var searchColumnNumber = destinationSheet.getRange("Q1").getColumn();

      // get all of the values for the column
      var destinationSheetColumnRValues = destinationSheet.getSheetValues(1, searchColumnNumber, -1, 1);

      // find the row that has the value we want
      var foundRow = destinationSheetColumnRValues.reduce(function(accumulator, currentValue, index) {
        if(currentValue[0] == values[0] && accumulator == -1) return index;
        return accumulator;
      }, -1);

      // if we found it
      if(foundRow != -1)
      {
        // set the value in the destination sheet
        destinationSheet.getRange("R" + (foundRow + 1 )).setValue(values[1]);
      }
    }
  }
}

您需要将此功能设置为工作表上的on edit触发器。有关更多详细信息,请参见https://developers.google.com/apps-script/guides/triggers/events

根据情况,可以使此代码更高效。例如,如果目标列始终被排序,或者搜索的列从不改变,等等。