У меня есть 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.
Я думаю, что это причина того, что я не получаю «совпадающие» значения, даже если в обоих моих окнах отображается одинаковая дата. Я честно озадачен тем, как решить эту проблему, поэтому любая помощь будет принята с благодарностью.