Если запрос в A1 = #REF!очистить все ячейки в диапазоне A2: B + lastrow - PullRequest
0 голосов
/ 20 мая 2019

У меня есть запрос в ячейке A1, который собирает информацию и отображает ее в другой электронной таблице. Когда кто-то вводит что-либо в диапазон, в котором отображается запрос, он выдает #REF! Поэтому я подумал о создании критерия if, который очищает все ячейки в этом диапазоне if('A1' == '#REF!'), но, похоже, не работает. Я также настроил его так, чтобы, если A1! = 'Формула запроса', установить его в 'Формула запроса'

  var queryString = '=Query(ImportRange("Spreadsheetid","\'Sheet1\'!A1:Z1000"),"SELECT Col1, Col2 WHERE Col1 != \'\' Order By Col1",1)'
  var lastRow = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getLastRow()
  Logger.log(getValue('A1'))///it says it's #REF!
   if('A1' == '#REF!'){
     SpreadsheetApp.getActiveSpreadsheet().getRange('A2:B'+lastRow).clear({contentsOnly: true});
}
if('A1' != queryString){
    setValue('A1',queryString)
}

Во время тестирования кажется, что основной проблемой являются критерии if. Разве это не выглядит как #REF !? Считает ли он это формулой запроса, хотя logger.log говорит, что он равен тому, на что он похож?

Ответы [ 2 ]

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

Если вы хотите запустить скрипт, я не понимаю, зачем вам вообще нужен ifs.

var queryString = 
'=Query(ImportRange("Spreadsheetid","\'Sheet1\'!A1:Z1000"),"SELECT Col1, Col2 WHERE Col1 != \'\' Order By Col1",1)';
             SpreadsheetApp.getActiveSpreadsheet().getRange('A2:B'+lastRow).clear({contentsOnly: true});
    SpreadsheetApp.getActiveSpreadsheet().getRange("a1").setValue(queryString);

Я бы также подумал о том, чтобы защитить этот диапазон, если вы беспокоитесь о том, что с ним будут связываться люди.

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

Вы не сможете просто использовать 'A1' в своем операторе if, чтобы проверить ячейку.Попробуйте определить его отдельно, а затем выполнить проверку вашей переменной, например:

function replaceRef() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh = ss.getSheetByName('SHEET_NAME'); //enter sheet name here

  var value = sh.getRange('A1').getValue();
  var formula =  sh.getRange('A1').getFormula();
  var queryString = '=Query(ImportRange("Spreadsheetid","\'Sheet1\'!A1:Z1000"),"SELECT Col1, Col2 WHERE Col1 != \'\' Order By Col1",1)';
  var lastRow = sh.getLastRow();

  if (value == '#REF!') {
    sh.getRange('A2:B'+lastRow).clear({contentsOnly: true});
  }
  if (formula != queryString) {
    sh.getRange(1, 1).setFormula(queryString); //get cell A1 and set formula
  }
}

Как видите, я внес несколько изменений.Основными являются определения значений, которые вы хотите проверить как переменные, что я сделал в var value и var formula.Затем вы можете использовать их для сравнения со значениями, которые вы используете в своих операторах if.

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