Проверка указанной строки c в скрипте Google App - PullRequest
0 голосов
/ 01 апреля 2020

Ситуация:

Привет всем! У меня есть таблица Google, которая содержит две вкладки («Сегодня» и «Текущий»), и я хочу проверить значения в ячейке последней строки и столбца C на вкладке «Сегодня» (например, C50 или C100, строка число может измениться), равно ли оно строке «ОШИБКА». Если эта ячейка содержит строку «ОШИБКА», она скопирует данные в ячейку A2: J2 с вкладки «Текущий» и заменит строку «ОШИБКА» в «Сегодня».


Проблема:

Следовательно, я набрал следующий код, и теперь он может получить значения в «Сегодня», но он не смог проверить, содержит ли он « ОШИБКА "или нет. Могу ли я узнать, что не так с моим кодом? Спасибо!


Код:

function checkdata(){
     var ss = SpreadsheetApp.getActiveSpreadsheet()
     var sheet = ss.getSheetByName('Today');
     var lastRow = sheet.getLastRow();
     var lastColumn = sheet.getLastColumn();
     var data = sheet.getSheetValues(lastRow,3,1,1);
     var ss2 = SpreadsheetApp.getActiveSpreadsheet();
     var sheet2 = ss2.getSheetByName('Current');  
     var values = sheet2.getRange("A2:J2").getValues()[0];  

  if (data) {
    if (data.indexOf('#ERROR!') < 0) {
  sheet.getRange(lastRow+1, 1, 1, 10).setValues([[].concat(values)]); 
    }}}

Ответы [ 2 ]

2 голосов
/ 01 апреля 2020

Как простая модификация, как насчет этой модификации?

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

  • getSheetValues() возвращает 2-мерный массив. В этом сценарии оператор if всегда true. Я подумал, что это может быть причиной вашей проблемы.

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

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

С:
var data = sheet.getSheetValues(lastRow,3,1,1);
Кому:
var data = sheet.getRange(lastRow, 3).getValue();
  • getValue() возвращает объект, который не является массив. Например, когда значение ячейки является строковым значением, возвращается строковое значение. Таким образом, я думаю, что оператор if работает.

Ссылки:

Если я неправильно понял ваш вопрос, а это не то направление, которое вам нужно, я прошу прощения.

0 голосов
/ 01 апреля 2020

Могу ли я узнать, что не так с моим кодом?

Несколько проблем:

  1. Если вы хотите заменить строку ERROR, вам необходимо скопировать данные из Current в строку, где находится ERROR (последняя строка), а не строка под ней. Итак: sheet.getRange(lastRow, 1, 1, 10).setValues([[].concat(values)]);
  2. #ERROR! и ERROR - это не одно и то же, поэтому просмотрите вашу ситуацию и решите, какую строку вы ищете (если ваш контент в ячейке #ERROR!, вы можете найти ERROR внутри него, но не наоборот
  3. sheet.getSheetValues(lastRow,3,1,1); вернет вам двумерный диапазон значений. Чтобы использовать метод indexOf, вам необходимо обратиться к одному значению этого диапазона значений Например, data[0][0].indexOf В качестве альтернативы: определите var data = sheet.getRange(lastRow,3,1,1).getValue();, который будет непосредственно возвращать вам значение, а не диапазон значений
  4. Метод indexOf определен таким образом, что он возвращает -1 если значение не найдено, и положение значения (которое больше -1), если значение найдено. Таким образом, вам необходимо изменить indexOf('#ERROR!') < 0 на indexOf('#ERROR!') >= 0

Пример:

function checkdata(){
  var ss = SpreadsheetApp.getActiveSpreadsheet()
  var sheet = ss.getSheetByName('Today');
  var lastRow = sheet.getLastRow();
  var lastColumn = sheet.getLastColumn();
  var data = sheet.getSheetValues(lastRow,3,1,1);
  var sheet2 = ss.getSheetByName('Current');  
  var values = sheet2.getRange("A2:J2").getValues()[0];  

  if (data) {
    if (data[0][0].indexOf('#ERROR!') >= 0) {
      sheet.getRange(lastRow, 1, 1, 10).setValues([[].concat(values)]); 
    }}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...