Google脚本,从一列与另一列中找到匹配值

时间:2018-09-28 05:04:36

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

我正在尝试进行“颜色检查”, 当检测到数值输入时,它将改变颜色。

我需要从一列与另一列中找到匹配值。 在该列的每个值中查找每个值的匹配项。

但是我的代码不起作用,有人可以帮助我吗?

这是我的代码:

function checkScriptCheck() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();

  var datePaymentValues = sheet.getRange("A:A").getValues();
  var dateInputValues = sheet.getRange("B:B").getValues();
  var datePaymentRange = sheet.getRange("A:A");
  
  var datePaymentColumn = sheet.getRange("A:A").getColumn();
  var checkResultValueColumn =sheet.getRange("C:C").getColumn()
  
  //cleaning color
  datePaymentRange.setBackground("white");
  
  //check and coloring
  for(i=0;i<datePaymentValues.length;i++){
    for(j=0;j<dateInputValues.length;j++){
      if(datePaymentValues[i][0]==dateInputValues[j][0]){
        sheet.getRange(i+1, datePaymentColumn).setBackground("green");
        sheet.getRange(i+1, checkResultValueColumn).setValue("check");
      };
    };
  };
  
};

这是我的工作表的链接: https://docs.google.com/spreadsheets/d/1DVbNaehsTWkiIkzW2nQx7w-ZB8CrPmSP5T5CpU24mbU/edit?usp=sharing

以下是一些屏幕截图:

Sheet Screenshoot

Code ScreenShoot

谢谢。

1 个答案:

答案 0 :(得分:0)

如果您创建要首先检查的值的映射,将会更容易。

function checkScriptCheck() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Sheet1");

  var datePaymentRange = sheet.getRange("A:A");
  var datePaymentValues = datePaymentRange.getValues();
  var dateInputValues = sheet.getRange("B:B").getValues();

  var datePaymentColumn = datePaymentRange.getColumn();
  var checkResultValueColumn =sheet.getRange("C:C").getColumn()

  //cleaning color
  datePaymentRange.setBackground("white");

  //create map of values to check for
  var inputDates = {};
  for (var i = 1; i < dateInputValues.length; i++) { // Exclude header row
    var inputDate = dateInputValues[i][0];
    if (inputDate != "") { // Exclude blank values
      inputDates[inputDate] = true;
    }    
  }

  //check and coloring
  for (var i = 1; i < datePaymentValues.length; i++) { // Exclude header row
    var paymentDate = datePaymentValues[i][0];
    if (inputDates[paymentDate]) {
      sheet.getRange(i+1, datePaymentColumn).setBackground("#00ff00");
      sheet.getRange(i+1, checkResultValueColumn).setValue("check");
    }
  }
}