Как запустить функцию с необязательным аргументом / параметром в Google Apps Script - PullRequest
0 голосов
/ 01 июля 2018

Я пытаюсь запустить функцию с необязательным аргументом / параметром в скрипте Google Apps. Функция создаст Документ Google, а также создаст Google Slide, если пользователь выберет Да. Моя проблема заключается в том, что при вызове функции extractReplace возникает ошибка, поскольку copySlide не определен.

Вот как я вызываю функцию:

  var copyId = DriveApp.getFileById(documentTemplate)
      .makeCopy(documentName + folderName, nsdestinationFolder) 
      .getId(); 
  var copyDocument = DocumentApp.openById(copyId); 
  var copyBody = copyDocument.getActiveSection(); 

  //call function to create technical slide proposal 
  if(createTemplate == "Yes"){
    createSlideProposal();
  } 
  else{
    extractReplace(copyBody, copySlide = 0); 
  } 

Я пробовал copySlide = 0, false, null, но он не работал, так как copySlide не определен, когда передается строка copySlide.replaceAllText. Существует еще одна функция, которая включает переменную copySlide, но она будет вызываться и передаваться в функцию extractReplace, если пользователь выберет «Да» для создания предложения слайда (powerpoint).

Вот функция, которая использует copySlide

function extractReplace(copyBody, copySlide) {
  var result  = ""; //result variable string = 0 
  var ss = SpreadsheetApp.openById("IDKEYHERE");
  var firstDatabasesheet = ss.getSheets()[0];
  var data = firstDatabasesheet.getDataRange().getValues();   

  data.forEach(function(row) {
    if (row[32] == TMSreferenceNumber){
      result = row[2] || row[16]; //chooses whichever cell that has something in it
      copyBody.replaceText('repbranchOffice', result); //replaces text in document template
      result = row[3] || row[17]; 
      copyBody.replaceText('repsalesContact', result);
      result = row[4] || row[18];
      copyBody.replaceText('repbranchReferenceNumber', result);
      result = row[5] || row[19];
      copyBody.replaceText('rependUser', result);    
      copySlide.replaceAllText('rependUser', result); //for slide
    }
...

Ответы [ 2 ]

0 голосов
/ 01 июля 2018

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

На сайте вызовов вы, как правило, хотите опускать параметры, если они являются необязательными и не важны для вас: foo(rq) против foo(rq, someParamIdontCareAbout) или foo(rq, 0), поскольку это снижает сложность кода вашего сайта вызовов. .

В функции с необязательными параметрами вы хотите инициализировать значения, если они необходимы (например, примитивы, флаги), или блоки защитного кода, которые взаимодействуют с необязательным аргументом класса (например, ссылкой на объект Slide).

Инициализация:

function foo(required, startVal = /* something */) {
  ...
}
function foo(required, startVal) {
  if (startVal === undefined) {
    /* more than a one-statement initialization */
  }
  ...
}

Блок охраны

function foo(required, objectRef) {
  /* Code that does not need the object reference */
  if (objectRef) {
    /*
     * Code that needs the object reference
     * objectRef.someMethod(...);
     */
  }
  /* More code that does not need the object reference */
}
0 голосов
/ 01 июля 2018

Заменить

  extractReplace(copyBody, copySlide = 0); 

с

  extractReplace(copyBody, 0); 
...