每次输入时在列中找到一个值,然后在另一个工作表中找到它,并将其着色?

时间:2016-10-07 00:21:30

标签: google-apps-script google-sheets

我有两张;
在第一个("代码")中,我有一些标签,数字和字符串以及连字符,如AA-01。 在第二张表中(" places")我列出了不同行和列中的所有标签。

我需要写一个代码给ONCE在表格中接收标签"代码",在表格中找到它"地点"并给它上色。
那应该是像onEdit一样,一旦我擦掉那个标签,我需要第二张纸上的单元格("地点")再次回到白色背景。
所以这就像一个真实的过程;当我在第一张纸上键入标签时,我希望这个过程发生,它在第二张纸上找到值,然后给它上色。

我已经做到了,但不确定为什么不工作!

function color() {
  var targetSheet = SpreadsheetApp.getActive().getSheetByName('places');
  var sheet       = SpreadsheetApp.getActive().getSheetByName('codes'); 
  var ToPlace     = sheet.getRange("F13:F300").getValues();
  var targetCell  = targetSheet.getRange("A1:Z").getValues();


  for(var i = 0; i < toPlace.length; i++) {
    if( toPlace[i] == targetCell){  
      targetSheet.setBackground("yellow"); 
    }
  }
}

1 个答案:

答案 0 :(得分:0)

您目前正在迭代获取字符串数组的代码行 然后,您将这些数组与targetCell进行比较,后者是一个字符串数组数组。

你可以这样做:

function onEdit(e) {
  var targetSheet = SpreadsheetApp.getActive().getSheetByName('places');
  var targetCells = targetSheet.getRange("A1:Z").getValues();

  for (var row = 0; row < targetSheet.getLastRow(); row++) {
    for (var col = 0; col < targetSheet.getLastColumn(); col++) {
      if (targetCells[row][col] === e.value) {
        targetSheet.getRange(row+1, col+1).setBackground("yellow");
        return;
      } else if (targetCells[row][col] === e.oldValue) {
        targetSheet.getRange(row+1, col+1).setBackground("white");
      }
    }
  }  
}