Решено: Как устранить ошибку "Параметры (число []) не соответствуют сигнатуре метода для SpreadsheetApp.Range.setValues" в скриптах Google - PullRequest
2 голосов
/ 09 апреля 2020

Я получаю сообщение «Параметры (число []) не соответствуют сигнатуре метода для SpreadsheetApp.Range.setValues.» ошибка в моем скрипте Google Apps, когда я пытаюсь записать массив на лист.

Сокращенная (упрощенная) версия кода. Фактический код проходит около 10000 записей.

Ошибка генерируется в последней строке, setValues.

Я знаю, что мне здесь не хватает чего-то очень простого.

function writeArrayToSheet() {

  var ss = SpreadsheetApp.openById("Spreadsheet_ID");
  var orderSheet = ss.getSheetByName("Sheet_Name");
  var vTable = orderSheet.getRange(1,6,5,11).getValues(); //Raw data 
  var vWriteTable = []; //Data that will be written to sheet
  var updateTime = new Date();
  var i = 0;
  var vSeconds = 0;


  while (i < 5 && vTable[i][0] != "") {

    //Logic section that calculated the number of seconds between

    if (vSeconds == 0) {
      vWriteTable.push("");
    } else {
      if (vTable[i][6] < certain logic) {
        vWriteTable.push("Yes");
      } else {
        vWriteTable.push("");
      }      
    }        
    i = i + 1;
  } // End while

  orderSheet.getRange(1,20,vWriteTable.length,1).setValues(vWriteTable);
} //End Function

Вот как выглядит vWriteTable при отладке: debug data

1 Ответ

4 голосов
/ 09 апреля 2020

setValues принимает (и getValues() возвращает):

  • 1 аргумент типа:
  • Object[][] двух размерный массив объектов

Он НЕ принимает одномерный массив. Диапазон: всегда двумерный, независимо от высоты или ширины диапазона .

Если A1: A2 это диапазон, то массив соответствующих значений будет выглядеть так:

  • [[1],[3]]

Аналогично, A1: B1 будет

  • [[1,2]]

A1: B2 будет

  • [[1,2],[3,4]]

Обратите внимание, как два измерения обеспечивают направление, и это всегда двумерный массив, даже если высота или ширина диапазона равна всего лишь 1.

Решение:

Pu sh массив 1D для создания выходной массив 2D.

Фрагмент:

vWriteTable.push([""]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...