Проверка, совпадает ли дата в Google Sheets / Google Scripts - PullRequest
0 голосов
/ 30 августа 2018

У меня есть 2 листа с датами, сохраненными в столбцах. Моя текущая дата сохраняется на листах Sheet1 и Sheet2 с одинаковым кодом:

curDate = Utilities.formatDate(new Date(), "EST", "MM/dd/yyyy");

Я хочу, чтобы один из моих сценариев сравнил даты от Листа1 до Листа2

На Листе 1 я использовал небольшой скрипт для установки текущей даты, а затем использовал функцию перетаскивания, чтобы установить предыдущую и следующую даты в столбце, используя одно и то же форматирование:

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Update Dates')
      .addItem('Set Dates', 'setDatesUp')
      .addToUi();
}

function setDatesUp(){
  var app = SpreadsheetApp;
  var ss = app.getActiveSpreadsheet();
  var sheet1 = ss.getSheetByName("Sheet1");

  var curDate = Utilities.formatDate(new Date(), "EST", "MM/dd/yyyy");

  sheet1.getRange("A4").setValue(curDate);
}

После того, как даты на Листе 1 настроены, я использую следующий скрипт для сравнения дат с Листа1 и Листа2, этот скрипт также устанавливает дату для Листа2, потому что, когда этот скрипт активирован, он должен отмечать текущую дату в соответствующем поле. .

function onEdit() {
  //Loops through all of Column C to determine which values are True and False
  //Saves all True Values Row # in SavedValues

  //Initialize Variables
  var app = SpreadsheetApp;
  var ss = app.getActiveSpreadsheet();
  var activeSheet = ss.getActiveSheet();
  var sheet2 = ss.getSheetByName("Sheet2");

  //Sheet 2 S2
  var cValuesS2 = sheet2.getRange("C:C").getValues();
  var dValuesS2 = sheet2.getRange("D:D").getValues();
  var lastRowS2 = sheet2.getLastRow();

  //Variables
  var curDate;
  var curVar;

  //Loops through all S2 rows, stops at last row
  for (var i = 0; i <= lastRowS2; i++){
    //Checks checkboxes in S2C:C for True OR "Complete" and adds dates in corresponding D:D cells
    if (cValuesS2[i] == "true" || cValuesS2[i] == "Complete") {
      //If D:i is empty
      if (dValuesS2[i] == "") {
        //Sets current date
        curDate = Utilities.formatDate(new Date(), "EST", "MM/dd/yyyy");
        //Set current D:i cell (*+1 offset)
        curVar = ("D" + (i + 1));
        //Sets curVar value to curDate
        sheet2.getRange(curVar).setValue(curDate);
      }
      //Checks checkboxes in S2C:C for False OR "Incomplete" and deletes dates in corresponding D:D cells
    } else if (cValuesS2[i] == "false" || cValuesS2[i] == "Incomplete") {
      //If D:i is NOT empty
      if (dValuesS2[i] != "") {
        //Set current D:i cell (*+1 offset)
        curVar = ("D" + (i + 1));
        //Sets curVar to ""
        sheet2.getRange(curVar).setValue("");
      }
    } 
  }
  updateS1();
}

Тогда, наконец, у меня есть сценарий для сравнения дат из 2 листов вместе.

function updateS1() {
  //Initialize Variables
  var app = SpreadsheetApp;
  var ss = app.getActiveSpreadsheet();
  var activeSheet = ss.getActiveSheet();
  var sheet1 = ss.getSheetByName("Sheet1");
  var sheet2 = ss.getSheetByName("Sheet2");

  //Sheet 1 S1
  var aValuesS1 = sheet1.getRange("A:A").getValues();
  var lastRowS1 = sheet1.getLastRow();

  //Sheet 2 S2
  var dValuesS2 = sheet2.getRange("D:D").getValues();
  var lastRowS2 = sheet2.getLastRow();

  //Variables
  var curVar;
  var curVar2;

  //Loop through Sheet 1 until the bottom
  //For each value in S1 A I use i
  for (var i = 0; i <= lastRowS1; i++) {
    //Loop through Sheet 2 until the bottom
    //For each value in S2 D I use j
    for (var j = 0; j <= lastRowS2; j++) {
        //TODO: Compare dates from S1 A:i to S2 D:j
        //If they are the same date the if statement will execute
    }
  }
}

Я уже пытался использовать следующее

if (aValuesS1[i].toString() == dValuesS2[j].toString()) {
}

и

if (aValuesS1[i] == dValuesS2[j]) {
}

но ни один из вариантов не сработал. Я заметил, что когда я беру «значение» для даты в Logger, я получаю много информации, которая мне не нужна или не нужна:

Чт 30 октября 2018 00:00:00 GMT-0400 (EDT)

вместо 8/30 / 18.
Я думаю, что это причина того, что я не получаю «совпадающие» значения, даже если в обоих моих окнах отображается одинаковая дата. Я честно озадачен тем, как решить эту проблему, поэтому любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 30 августа 2018

Так что, как оказалось, я действительно могу сравнить в своем операторе if с .toString (), чтобы мой цикл выполнялся в скрипте Google Apps, достаточно много времени.

...