Проблемы с использованием функции setValues - PullRequest
0 голосов
/ 14 февраля 2019

Я получаю сообщение об ошибке при использовании функции setValues() для экспорта массива в листы Google.Я перепробовал много разных методов для создания своего 2D-массива, но все еще продолжаю получать те же ошибки.Иногда мой код запускается (массив будет экспортирован в электронную таблицу), но я все равно получаю сообщение об ошибке.

Первоначально я использовал функцию setValue() в цикле for, но код истекает из-за слишком длительного выполнениядолго.Поэтому я попытался выгрузить все свои данные в 2D-массив и сразу передать их в электронную таблицу.

Попытался создать массив в виде пустого 2D-массива

  var outputArray = [[]]

и использовать .pushзаполнить данные в него

Попытка создания пустого массива с помощью функции:

function create2DArray(rows) {
  var arr = [];

  for (var i=0;i<rows;i++) {
     arr[i] = [];
  }

  return arr;
}

и добавление данных в виде строк (внутри цикла for, который повторяется по rowNumber)

outputArray[rowNumber] = [data1, data2, data3,...]

Использовал ту же функцию, что и выше, для создания пустого массива и создания промежуточного массива, а затем поместил его в выходной массив

outputArrayIntermediate[0] = data1;
outputArrayIntermediate[1] = data2;
outputArrayIntermediate[2] = data3;
outputArrayIntermediate[3] = data4;...

outputArray[rowNumber] = outputArrayIntermediate;

Вот где ошибка продолжает возникать

var setRows = outputArray.length;
 var setColumns = outputArray[0].length

  revenueSheet.getRange(2,1,setRows,setColumns).setValues(outputArray);

Когда я включаю переменную setColumns, я получаю сообщение об ошибке: «Количество столбцов в данных не соответствует количеству столбцов в диапазоне. У данных 0, но в диапазоне 11».Это все равно заполняет данные в электронную таблицу.

Когда я не включаю переменную setColumns, я получаю ошибку: «Количество столбцов в данных не соответствует количеству столбцов в диапазоне. Данныеимеет 11, но диапазон имеет 1 ".

Ответы [ 3 ]

0 голосов
/ 15 февраля 2019

Вам нужно только [], а не [[]], потому что вы помещаете массивы в outputArray, и push гарантирует, что он всегда будет расширяться при необходимости.

Попробуйте

outputArray = [];
outputArray.push([data1, data2, data3]);
outputArray.push([data4, data5, data6]);     

revenueSheet.getRange(2,1,outputArray.length,outputArray.length[]).setValues(outputArray);
0 голосов
/ 16 февраля 2019

Есть ли когда-нибудь случай, когда в одной строке больше столбцов, чем в другой?Например, если в ваших данных «строка» 1 в виде 5 столбцов (outputArray.length = 5), а в строке 2 - 6, то для данных требуется диапазон с 6 столбцами.

В этом случае некоторые решения в порядке простоты:

1. Если справа нет важных данныхгде вы вставляете свои данные, вы можете использовать revenueSheet.getMaxColumns() в вашем .getRange().setValues().

2. Выполнить итерацию по набору данных, чтобы найти строку с самой длинной длиной, и установить ее какколичество столбцов.Для этого см. этот ответ для нескольких вариантов.

0 голосов
/ 14 февраля 2019

Возможно, это вам поможет:

function createSSData(numrows,numcols) {
  var numrows=numrows || 20;
  var numcols=numcols || 20;
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getActiveSheet();
  var values=[];
  for(var i=0;i<numrows;i++) {
    values[i]=[];
    for(var j=0;j<numcols;j++) {
      values[i].push(Utilities.formatString('row: %s,col: %s',i+1, j+1));
    }
  }
  sh.getRange(1,1,values.length,values[0].length).setValues(values);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...