Условие оператора IF, основанное на ответе на другой оператор IF - PullRequest
0 голосов
/ 19 мая 2019

У меня есть таблица отслеживания, которая открывает электронную таблицу пользователя и отслеживает, ответили ли они на правильную неделю.Пользователь может зарегистрироваться в любое время, поэтому у меня есть оператор if, который подсчитывает количество дней между сегодняшним днем ​​и датой создания электронной таблицы.Затем он перемещает его в нужную ячейку.Затем мне нужно другое заявление if, в котором говорится, что если дата последнего обновления меньше 7 дней, то зеленый, если не красный.Оба оператора If работают как автономный код, но когда я пытаюсь их выполнить, сначала выполняется второй оператор If, помещая Y или No в ячейку, а затем он активирует правильную ячейку на основе даты в таблице!Мне нужно, чтобы 2-й оператор If выполнялся после того, как он активировал правильный лист.

Я попытался переместить синтаксис.Я попытался создать оператор If внутри каждого оператора If.Проблема заключается в том, что код должен запускаться автоматически в течение полных 52 недель в году

function trackingSheetUpdate() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sourceSheet = ss.getSheetByName('Active Campaign');
var trackSheet = ss.getSheetByName('Tracking')
var now = new Date()
var createDate = sourceSheet.getRange(2, 6).getValue()
var NoOfDays = (now - createDate) / (1000 * 60 * 60 * 24);
var diff = Math.round(NoOfDays)
Logger.log(diff);

var rowData = sourceSheet.getRange(1, 1, sourceSheet.getLastRow(), sourceSheet.getLastColumn()).getValues();

for (var i = 2; i < rowData.length; i++) {

    var getUpdate = sourceSheet.getRange(i, 5).getValue();
    var openSheet = SpreadsheetApp.openByUrl(getUpdate).getSheetByName('Sheet1')
    var row = openSheet.getLastRow()
    var weeklyUpdate = openSheet.getRange(row, 1).getValue();
    var calc = (now - weeklyUpdate) / (1000 * 60 * 60 * 24)
    var calcDate = Math.round(calc)

    if (diff > 1 && diff <= 7) {
        trackSheet.getRange(i, 2).activateAsCurrentCell()
    } else if (diff > 7 && diff <= 14) {
        trackSheet.getRange(i, 3).activateAsCurrentCell()
    } else if (diff > 14 && diff <= 21) {
        trackSheet.getRange(i, 4).activateAsCurrentCell()
    }


    if (calcDate <= 7) {
        trackSheet.getActiveCell().setValue("Y")
    } else {
        trackSheet.getActiveCell().setValue("N")
    }

Я установил дату создания на 8/5/19, поэтому он должен перейти к столбцу 2- что это делает.Я установил дату последнего обновления на 5/5/19, поэтому он должен быть красным и «Нет», что и есть (за исключением того, что он помещает этот результат в любую ячейку, в которой я его оставляю, затем перемещается в столбец 2 и активирует его!)

1 Ответ

0 голосов
/ 20 мая 2019

Пожалуйста, попробуйте переформатировать ваш вопрос, чтобы было яснее, что вы ожидаете, что вы хотите, и каков именно ваш вопрос.

Из того, что я понимаю, вы ищете:

  1. A DRY решение для получения текущей недели.

Вы можете сделать это несколькими способами. Используя существующую переменную diff, вместо проверки, является ли она > && <=, вы можете использовать модуль и деление, например,

var diff = 7
console.log((diff-(diff%7))/7 + 1)

var diff = 22
console.log((diff-(diff%7))/7 + 1)

var diff = 45
console.log((diff-(diff%7))/7 + 1)

Вы также можете использовать что-то вроде getWeek () функция для расчета недели в году и смещения ее на то, что нужно вашей электронной таблице, или тому подобное.

  1. Ваш первый оператор if устанавливает текущую ячейку, а второй оператор if пытается установить значение для активной ячейки. Это не работает, как вы хотите.

Во-первых, обратите внимание, что getActiveCell () и getCurrentCell () работают по-разному. Вы можете попытаться использовать getCurrentCell () в своем втором операторе if - однако, вероятно, лучше получить диапазон, используя ваш первый оператор if, и установить его, используя второй, например,

var weeknum = (diff-(diff%7))/7 + 1;
var myCell =  trackSheet.getRange(i, weeknum)

calcDate <= 7 ? myCell.setValue("Y") : myCell.setValue("N")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...