Мне нужна помощь, чтобы этот цикл «For» и оператор «If» работали - PullRequest
2 голосов
/ 14 октября 2019

Весь сценарий опирается на две комбинации цикла For и оператора If. Оба по сути одинаковы. Но по какой-то причине я могу заставить работать первый раздел, а не второй.

Я включил свой скрипт ниже с примечаниями. Спасибо.

/** @OnlyCurrentDoc */

function onEdit(e) {

//This part ensures the main script only runs if the cell F6 in the sheet "Daily Data" is edited.
  if (
    e.source.getSheetName() == "Daily Data" &&
    e.range.columnStart == 6 &&
    e.range.columnEnd == 6 &&
    e.range.rowStart >= 6 &&
    e.range.rowEnd <= 6 
  ) {

    //Secction 1: This section finds the lowest # from a list of numbers by finding the lowest empty cell in coloumn D using an If statement:
      var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
      var daily_data = spreadsheet.getSheetByName("Daily Data");
      var entirelistoftimes = daily_data.getRange(3, 4, 62).getValues();  
          for(var i=0; i<entirelistoftimes.length ; i++){  //This For loop will run through the entire D column in sheet "Daily Data".
            if (entirelistoftimes[i] == ""){        //This If statement will look for the first empty cell.
              //Copies the Total Number:
              var TotalNo = daily_data.getRange(i+2, 2).getValues();   //Gets the # from the cell next to the last filled cell in column D.
                spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Daily Data'), true);
              spreadsheet.getRange('F8').setValues(TotalNo);  //Displays the # in a cell F8 in sheet "Daily Data".
            //Stop once the first blank cell has been found:
            break;
          }
        }

    //THIS IS THE SECTION I CANNOT GET TO WORK:
    //Section 2: This section uses the # we got from the above section to find a time from a the corresponding row of sheet "Long Term Data":
      var LTD_data = spreadsheet.getSheetByName("Long Term Data");
      var LTD_data_entirelistoftimes = LTD_data.getRange(6, 2, 65).getValues();  
          for(var j=0; j<LTD_data_entirelistoftimes.length ; j++){  //This For loop will run through the Long Term Data sheet, through the list of numbers column.
            if (LTD_data_entirelistoftimes[j] == TotalNo){        //This if statement will look through column B from row 6 for the # we got from section 1 above.
              //Copies the time from column D in Lon:
              var YesterdayTime = LTD_data.getRange(j, 4).getValues();    //Gets the time from column D in row j in the "Long Term Data" Sheet.
                spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Daily Data'), true);
                spreadsheet.getRange('F9').setValues(YesterdayTime);  //Displays the time from the time underneath the # in sheet "Daily Data".
            //Stop once the above has been completed:
            break;
          }
        }
      }
}
;

1 Ответ

3 голосов
/ 14 октября 2019

Если ваш скрипт изменен, как насчет следующей модификации?

Точка модификации:

  • В вашем скрипте, на if (LTD_data_entirelistoftimes[j] == TotalNo){, LTD_data_entirelistoftimes[j] и TotalNo есть1-мерный массив и 2-мерный массив соответственно. Потому что getValues() возвращает 2-х мерный массив. Я думаю, что причиной вашей проблемы является прямое сравнение этих значений.

Модифицированный скрипт:

Пожалуйста, измените ваш скрипт следующим образом.

Шаблон 1:

Когда для оператора сравнения используется ==, вы можете изменить его следующим образом.

С:
if (LTD_data_entirelistoftimes[j] == TotalNo){
Кому:
if (LTD_data_entirelistoftimes[j] == TotalNo[0][0]){

или

if (LTD_data_entirelistoftimes[j][0] == TotalNo[0][0]){

Pattern 2:

Если для оператора сравнения используется ===, вы можете изменить его следующим образом.

С:
if (LTD_data_entirelistoftimes[j] == TotalNo){
Кому:
if (LTD_data_entirelistoftimes[j][0] === TotalNo[0][0]){

Примечание:

  • В if (entirelistoftimes[i] == ""){, == используется в качестве оператора сравнения. Так что оператор if работает.

Ссылки:

Если эта модификация не решила вашу проблему, прошу прощения. В то время, можете ли вы предоставить образец таблицы? По этому я хотел бы изменить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...