Как мне использовать глобальную переменную, содержащую логическое значение, для изменения другой переменной в скрипте Google таблиц?

#javascript #google-sheets

#javascript #google-sheets

Вопрос:

Я создаю небольшую фиктивную электронную таблицу, и я хотел бы использовать переменную, указывающую на a boolean , которая будет изменена в соответствии с некоторой логикой, затем используйте это логическое значение для изменения другого var , как мы делаем с js кодированием для web

В случае partialDel() запуска я хочу установить значение, range true а затем, при addForm запуске, изменить range variable значение свойства in case range true .

 //I set the property here
PropertiesService.getScriptProperties().setProperty('range', false);

function partialDel() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("UMS - Volumetria");
  sheet.insertRowBefore(11);
  sheet.getRange(11,2).setValue("Item:");
  sheet.insertRowBefore(13);
  sheet.getRange(13,2).setValue("Quantidade:");
  sheet.getRange(13,6).setValue("de");
  sheet.getRange("UMS - Volumetria!D13:E13").merge();
  sheet.getRange("UMS - Volumetria!G13:H13").merge().setBorder(null, null, true, null, false, true, "black", SpreadsheetApp.BorderStyle.SOLID);
  //here is where I set it to true
  PropertiesService.getScriptProperties().setProperty('range', true)
}

  function addForm () {
  var range = "UMS - Volumetria!B9:L14"
//here is where I wanna check if the property is true 
  if(PropertiesService.getScriptProperties().getProperty('range') == true){
  range = "UMS - Volumetria!B9:L16" 
  }  
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const source = ss.getRange(range);
  const destSheet = ss.getSheetByName("UMS - Volumetria");  
  const destRange = destSheet.getRange(destSheet.getLastRow() 3,2);
  source.copyTo(destRange);
}

  

Комментарии:

1. Этот код работает для меня так, как вы его написали. range изменения в addForm зависимости от partialDel того, выполнялся ли он первым. Есть ли у вас конкретная проблема? Является partialRange ли часть родительской области этих функций, как у вас здесь в вашем примере?

2. Спасибо, что ответили мне здесь. Я ничего не знаю о скриптах Google, поэтому мне здесь не нравится, ха-ха. Ну, addForm и partialDel размещаются внутри отдельных кнопок в электронной таблице. Я заметил, что переменная, которую я установил ранее, не сохраняется между вызовами функций.

3. порядок таков, что в случае частичной доставки формы внутри этой таблицы пользователь partialDel сначала нажимает, а затем добавляет формы с помощью addForm . При addForm вызове var set повторно инициализируется.

4. Итак, я обнаружил PropertiesService.getScriptProperties() . Я читал, что это больше указано на случай, если я хочу сохранить некоторые state в скрипте. Но это все равно не работает, когда я запускаю if инструкцию. Я обновил свой код выше

Ответ №1:

Я решил это, изменив if оператор syntax .

Каким-то образом в скрипте Google сравнение данных с booleans не сработало для меня. Итак, я просто проверил truish значение range .

старый код: if(PropertiesService.getScriptProperties().getProperty('range') === true)

новый код: if(PropertiesService.getScriptProperties().getProperty('range'))

 //PropertiesService.getScriptProperties().setProperty('range', false);

function partialDel() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("UMS - Volumetria");
  sheet.insertRowBefore(11);
  sheet.getRange(11,2).setValue("Item:");
  sheet.insertRowBefore(13);
  sheet.getRange(13,2).setValue("Quantidade:");
  sheet.getRange(13,6).setValue("de");
  sheet.getRange("UMS - Volumetria!D13:E13").merge();
  sheet.getRange("UMS - Volumetria!G13:H13").merge().setBorder(null, null, true, null, false, true, "black", SpreadsheetApp.BorderStyle.SOLID);
  PropertiesService.getScriptProperties().setProperty('range', true)
}

  function addForm () {
  let range = "UMS - Volumetria!B9:L14" 
  if(PropertiesService.getScriptProperties().getProperty('range')){
  range = "UMS - Volumetria!B9:L16" 
  }  
  var ss = SpreadsheetApp.getActiveSpreadsheet();    
  const source = ss.getRange(range);
  const destSheet = ss.getSheetByName("UMS - Volumetria");  
  const destRange = destSheet.getRange(destSheet.getLastRow() 3,2);
  source.copyTo(destRange);
}