У кода OP есть некоторые фундаментальные синтаксические и логические недостатки.Устранение неполадок с помощью команды Logger могло бы помочь оператору OP определить проблемы.
1) Неправильный синтаксис используется для доступа к значению массива.Например, getLateDay
использует v[0,i]
;Здесь есть две проблемы.
- оба элемента массива должны быть заключены в квадратные скобки (
[0][i]
), - запрашивает не тот элемент.Вместо [0] [i] должно быть [i] [0].
2) getLateDay
и getEarlyDay
запрашивают значения в столбце C. Скорее, они должны запрашиватьстолбец D (столбец дат).
3) И getLateDay
, и getEarlyDay
должны оценить if(tmp>tmp1)
.Однако getLateDay
должен возвращать "tmp", а getEarlyDay
должен возвращать "tmp1".
4) getLateDay
и getEarlyDay
повторяют большую часть основного кода и в значительной степени идентичны.В интересах производительности их можно легко включить в основной код.
5) Для оценки раннего дня / позднего дня по сравнению с «tmp» требуется только один цикл, хотя, конечно, условия альфа-кода применяются кEarlyDay и LateDay должны оцениваться отдельно.Я также обнаружил, что значения, которые должны были быть сохранены для LateDay, лучше всего оценивались в последовательности операторов IF.Весь второй цикл может быть удален.
6) Это могло бы быть менее запутанным и сэкономить несколько минут времени обработки, если вместо того, чтобы работать с отдельными диапазонами для столбца C и столбца D, один диапазон изначения были объявлены для объединенных столбцов.Это будет гораздо важнее, поскольку задача ОП растет, и они работают с 25 столбцами.
Я изменил код ОП для учета этих комментариев.Я оставил несколько операторов Logger в коде, чтобы OP мог оценивать переменные в различных состояниях кода.
//text data in D, dates to evaluate earlyDay/lateDay in C
var Offset = 1;
function deleteRows() {
// set up the spreadsheet
var app = SpreadsheetApp.getActiveSpreadsheet();
var targetSheet = app.getSheetByName('Sheet1');
// define the data ranges and get values
var r = targetSheet.getRange('C:C');
var v = r.getValues();
var r1 = targetSheet.getRange('D:D');
var f = r1.getValues();
//Logger.log("DEBUG: code: "+v[0][0]+", date: "+f[0][0].getTime());//DEBUG
//Logger.log("DEBUG: length of f: "+f.length);//DEBUG
// get the respective values for lateDay and earlyDay
var lateDay = new Date(getLateDay()).getTime();
var earlyDay = new Date(getEarlyDay()).getTime();
//Logger.log("DEBUG: LateDay: "+lateDay+", EarlyDay: "+earlyDay); //DEBUG
// Loop through the data, starting at te bottom.
for (var i = f.length - 1; i > -1; i--) {
// get the date for this row
var tmp = new Date(f[i][0]).getTime();
// evaluate if this row is early and the values of possible codes
if (tmp == earlyDay && (v[i][0] == "AAA" || v[i][0] == "BBB" || v[i][0] == "DDD" || v[i][0] == "FFF")) {
Logger.log("DEBUG: Option#1 i: " + i + ", row: " + (i + 1) + "- delete row , earlyDay: " + earlyDay + ", tmp: " + tmp + ", code: " + v[i][0]); //DEBUG
// Note the row deleted is "i+1" because the deleteRow command matchs the actual row number, whereas the loop works on a zero-basis.
targetSheet.deleteRow(i + 1);
} else {
//Logger.log("DEBUG: Option#1 - do nothing");//DEBUG
}
// evaluate if this row is late and the values of possible codes
// Note this is an either or; a day cannot be both early and late
if (tmp == lateDay) {
Logger.log("today is Late Day");
if (v[i][0] != "FFF") {
if (v[i][0] != "DDD") {
if (v[i][0] != "BBB") {
if (v[i][0] != "AAA") {
Logger.log("DEBUG: code <> AAA or BBB or DDD or FFF"); //DEBUG
Logger.log("DEBUG: Option#2 i: " + i + ", row: " + (i + 1) + "- delete row , lateDay: " + lateDay + ", tmp: " + tmp + ", code: " + v[i][0]); //DEBUG
targetSheet.deleteRow(i + 1);
} else {
//Logger.log("DEBUG: Option#2 - do nothing");//DEBUG
}
}
}
}
}
}
}
function getLateDay() {
var app = SpreadsheetApp.getActiveSpreadsheet();
var targetSheet = app.getSheetByName('Sheet1');
var r1 = targetSheet.getRange('D:D');
var f = r1.getValues();
for (var i = f.length - 1; i > -1; i--) {
var tmp = new Date(f[i][0]).getTime();
var tmp1 = new Date(f[i - 1][0]).getTime();
//Logger.log("DEBUG: LateDay: i: "+i+", this day: "+tmp+", yesterday: "+tmp1);//DEBUG
if (tmp > tmp1) {
//Logger.log("DEBUG: return this day: "+tmp);//DEBUG
return tmp;
}
}
//Logger.log("DEBUG: return null");
return null;
}
function getEarlyDay() {
var app = SpreadsheetApp.getActiveSpreadsheet();
var targetSheet = app.getSheetByName('Sheet1');
var r1 = targetSheet.getRange('D:D');
var f = r1.getValues();
for (var i = f.length - 1; i > -1; i--) {
var tmp = new Date(f[i][0]).getTime();
var tmp1 = new Date(f[i - 1][0]).getTime();
//Logger.log("DEBUG: EarlyDay: i: "+i+", tmp: "+tmp+", tmp1: "+tmp1);//DEBUG
if (tmp > tmp1) {
//Logger.log("DEBUG: return this day: "+tmp1);//DEBUG
return tmp1;
}
}
//Logger.log("DEBUG: return null");//DEBUG
return null;
}
ДО и ПОСЛЕ снимков экрана