Передача массива в скрипт Google Apps для WebApp - PullRequest
1 голос
/ 22 апреля 2020

У меня проблемы с получением массива на принимающей стороне при передаче массива из другого WebApp, ниже приведен код для проходящей стороны:

    //Pass parameter to Holiday Master Sheet webapp
    function callRemoteFunc(url, funcName, params) {
      var tempUrl = url + "?funcname=" + funcName + "&params=" + params;

      var response =  UrlFetchApp.fetch(tempUrl);
      return response.getContentText();
    }
    var FUNC_WRITE_RECORD = "writeRecord";

function test(timeStamp, email, slackID, formNum, holidayType, startDate, endDate, startTime,
                endTime, halfOneDay, daysRested, cancelFlag) {
    var dataArray = [];

  dataArray.push([
            timeStamp,  //タイムスタンプ                                               
            email,      //メールアドレス
            slackID,    //Slack ID
            formNum,    //申請番号                 
            holidayType,//休暇の種類
            startDate,  //開始日
            endDate,    //終了日
            startTime,  //開始時間                   
            endTime,    //終了時間                    
            halfOneDay, //数日・半日
            daysRested, //休み時間         
            cancelFlag  //取り消すフラグ
            ]);

  callRemoteFunc(URL_137, FUNC_WRITE_RECORD, dataArray);
}

И это код на принимающей стороне:

function doGet(e) {

  var funcName = e.parameters.funcname;
  var params = e.parameters.params;

  console.log(funcName[0] + " " + params);

  switch(funcName[0]) {
    case "writeRecord":
      writeRecord(params);
      break;
  }
}

function writeRecord(dataArray) {
  var lastRow = recordSheet.getLastRow();

  //Write data into holiday record sheet  
  recordSheet.getRange(++lastRow, 1, dataArray.length, dataArray[0].length).setValues(dataArray);
}

Я получаю эту ошибку "Параметры (число []) не соответствуют сигнатуре метода для SpreadsheetApp.Range.setValues."

1 Ответ

3 голосов
/ 22 апреля 2020

Я считаю, что это то, что вы хотите:

  • Вы хотите отправить funcName и params в веб-приложения с помощью скрипта Google Apps.
  • Вы хотите знать причина сообщения об ошибке The parameters (number[]) don't match the method signature for SpreadsheetApp.Range.setValues..

Проблема и решение:

В вашем сценарии params - это массив. Когда params отправляется с использованием var tempUrl = url + "?funcname=" + funcName + "&params=" + params, params преобразуется в строку, как params.toString(). В этом случае var params = e.parameters.params; в doGet(e) становится похожим на [sample1,sample2,sample3,,,]. Когда это значение используется в setValues, такая ошибка возникает. Это причина вашего сообщения об ошибке.

Чтобы избежать этой ошибки, как насчет следующей модификации?

Модифицированный скрипт:

Когда ваш скрипт модифицируется, пожалуйста, измените функцию doGet(e) следующим образом.

С:
var params = e.parameters.params;
Кому:
var params = [e.parameter.params.split(",")];

Примечание:

При изменении сценария веб-приложений, пожалуйста, повторно разверните Интернет Приложения как новая версия. Таким образом, последний скрипт отражается в веб-приложениях. Пожалуйста, будьте осторожны.

Ссылки:

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