В Google Sheets почему мой записанный макрос также запускает два других скрипта при вызове? - PullRequest
0 голосов
/ 06 сентября 2018

Я записал макрос в Sheets, цель которого - добавить цветовую шкалу с условным форматированием. Это работает нормально, но я получаю два всплывающих окна с надписью "Готово", когда он завершается. Я проследил их до двух других сценариев приложения, которые я использовал в прошлом. (Примечание: это скрипты, а не записанные макросы)

Q. Почему, когда я вызываю макрос с назначенным ему сочетанием клавиш, я также получаю всплывающие окна для других сценариев? Сами сценарии, по-видимому, не работают полностью (поскольку изменяемые диапазоны неизменны).

Это записанный макрос:

function Addcolourscale() {
  var spreadsheet = SpreadsheetApp.getActive();
  var conditionalFormatRules = spreadsheet.getActiveSheet().getConditionalFormatRules();
  conditionalFormatRules.push(SpreadsheetApp.newConditionalFormatRule()
  .setRanges([spreadsheet.getActiveRange()])
  .whenCellNotEmpty()
  .setBackground('#B7E1CD')
  .build());
  spreadsheet.getActiveSheet().setConditionalFormatRules(conditionalFormatRules);
  conditionalFormatRules = spreadsheet.getActiveSheet().getConditionalFormatRules();
  conditionalFormatRules.splice(conditionalFormatRules.length - 1, 1, SpreadsheetApp.newConditionalFormatRule()
  .setRanges([spreadsheet.getActiveRange()])
  .setGradientMinpoint('#57BB8A')
  .setGradientMaxpoint('#FFFFFF')
  .build()); 
  spreadsheet.getActiveSheet().setConditionalFormatRules(conditionalFormatRules);
  conditionalFormatRules = spreadsheet.getActiveSheet().getConditionalFormatRules();
  conditionalFormatRules.splice(conditionalFormatRules.length - 1, 1, SpreadsheetApp.newConditionalFormatRule()
  .setRanges([spreadsheet.getActiveRange()])
  .setGradientMinpoint('#57BB8A')
  .setGradientMidpointWithValue('#FFD666', SpreadsheetApp.InterpolationType.PERCENTILE, '50')
  .setGradientMaxpoint('#E67C73')
  .build());
  spreadsheet.getActiveSheet().setConditionalFormatRules(conditionalFormatRules);
};

Это один из сценариев, который создает всплывающее окно из-за его последних двух строк, когда завершается вышеуказанный макрос. Это то, что я адаптировал на онлайн-ресурсе, поэтому я не очень хорошо это знаю.

function CopyClientChannelUseBack(){
    /* Edit the vars below this line for your needs */
    var sourceSheet  = "12 mth Client channel use" ;  // Enter the name of the sheet with the source data
    var sourceRange = "A19:S29" ; // Enter the range of the cells with the source data
    var targetSheet = "12 mth Client channel use" ; // Enter the name of the target sheet  
    var targetRange = "A20:S30" ; // Enter the range of cells you wish to copy data to. Note this must be same size as source range.
    /* No need to edit below this point */  


    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getSheetByName(sourceSheet);
    var values = sheet.getRange(sourceRange).getValues();
    ss.getSheetByName(targetSheet).getRange(targetRange).setValues(values);
  SpreadsheetApp.flush()

      /* Edit the vars below this line for your needs */
    var sourceSheet  = "12 mth Client channel use" ;  // Enter the name of the sheet with the source data
    var sourceRange = "A49:N59" ; // Enter the range of the cells with the source data
    var targetSheet = "12 mth Client channel use" ; // Enter the name of the target sheet  
    var targetRange = "A50:N60" ; // Enter the range of cells you wish to copy data to. Note this must be same size as source range.
    /* No need to edit below this point */ 

    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getSheetByName(sourceSheet);
    var values = sheet.getRange(sourceRange).getValues();
    ss.getSheetByName(targetSheet).getRange(targetRange).setValues(values);
  SpreadsheetApp.flush()      
  SpreadsheetApp.getUi().alert("Done")
}

Файл манифеста не имеет ссылки на сценарии, только макрос.

{
  "timeZone": "Europe/London",
  "dependencies": {
  },
  "exceptionLogging": "STACKDRIVER",
  "sheets": {
    "macros": [{
      "menuName": "Add colour scale",
      "functionName": "Addcolourscale",
      "defaultShortcut": "Ctrl+Alt+Shift+9"
    }]
  }
}

1 Ответ

0 голосов
/ 17 сентября 2018

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

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