Я пишу сценарий, который, если значение, записанное в ячейках L1, L2 и L3, соответствует «Ok», тогда сценарий сохраняет электронную таблицу в PDF, если в любой из этих трех ячеек записано что-либо, кроме «Ok», сценарий должен остановиться, не должен продолжить и сохранить PDF.

function Test() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Squads'), true);
  spreadsheet.getRange('Squads!W17').activate();

  if ('Gerais!L1'="Ok"){
  spreadsheet.getRange('Gerais!M1').activate();
  spreadsheet.getCurrentCell().setValue('Aprovado');
  }
  if ('Gerais!L2'="Ok"){
  spreadsheet.getRange('Gerais!M2').activate();
  spreadsheet.getCurrentCell().setValue('Aprovado');
  }
  if ('Gerais!L3'="Ok"){
  spreadsheet.getRange('Gerais!M3').activate();
  spreadsheet.getCurrentCell().setValue('Aprovado');
  }

}

Когда я пытаюсь сохранить этот скрипт, на левой стороне появляется сообщение: Неверный перевод. (строка 1, файл "Тесты")

Я хочу, чтобы просто, если в ячейках L1, L2 и L3 было написано «Ok», скрипт переходит на следующий шаг и сохраняет электронную таблицу в PDF.

Скрипт PDF я не включил сюда, чтобы не расширять размер вопроса. Но это явно ниже ЕСЛИ

2
Brondby IF 14 Авг 2019 в 19:22

2 ответа

Лучший ответ

Вы ошиблись:

Например, if('Gerais!L1'="Ok") - это присвоение, а не сравнение. Это должно быть написано как if(Gerais!L1'=="Ok")

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

Что касается остальной части кода, попробуйте это:

GetValues () и getValue () не будут иметь большого значения здесь, но в командах циклов это может иметь огромное значение.

function Test() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Gerais');
  var rg=sh.getRange("L1:L3");
  var vA=rg.getValues();
  if (vA[0][0]=="Ok"){
    sh.getRange('M1').setValue('Aprovado');
  }
  if (vA[1][0]=="Ok"){
    sh.getRange('M2').setValue('Aprovado');
  }
  if (vA[2][0]=="Ok"){
    sh.getRange('M3').setValue('Aprovado');
  }
}

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

Лучшие практики

Ответ на дополнительный вопрос:

if(vA[][0]=="Ok" && vA[1][0]=="Ok" && vA[2][0]=="Ok") {
  //continue to pdf
}else{
  //take another path
}
2
Cooper 14 Авг 2019 в 17:54

Если вы хотите проверить значение ячейки, вам нужно вызвать getRange () и getValue () или getValues ().

Например:

var data = spreadsheet.getSheetByName('Gerais').getRange('L1:L3').getValues();
if (data[0][0] == 'OK') { // data[0][0] is L1
  // do something fun
}
if (data[1][0] == 'OK') { // data[1][0] is L2
  // do something fun
}
// etc.
1
Jeremy 14 Авг 2019 в 17:11