Неправильная ширина диапазона (равно 1, но должно быть 2) - PullRequest
0 голосов
/ 23 декабря 2018

Я получаю сообщение об ошибке «Неправильная ширина диапазона равна 1, но должно быть 2», и я не знаю, почему.Этот точно такой же фрагмент кода работает в том же проекте на другом скрипте на том же листе без проблем.

Logger выводит «2.0» для widthApplied2, как и ожидалось.

Даже если я вручную укажу «width» (numColumns) как «2», он не будет работать.Использование переменных numColumns и widthApplied2 не работает.Есть идеи?

var arrayApplied = listApplied.split(',');
var arrayApplied2 = [];
while (arrayApplied.length)
    arrayApplied2.push(arrayApplied.splice(0,2));
var lengthApplied2 = arrayApplied2.length;
var widthApplied2 = arrayApplied2[0].length;
//Logger.log(arrayApplied2);
//Logger.log(lengthApplied2);
Logger.log(widthApplied2);

//PASTE APPLIED TEAMS TO SHEET
var startRow = 15;
var startColumn = 7;
var numRows = lengthApplied2;
var numColumns = widthApplied2;

var ss = SpreadsheetApp.openById('1tyW1n-wBZVygFSovF3Z3NrlqDjsANzOyL7aIayTCdFQ');
var sheet = ss.getSheetByName('test');
var range = sheet.getRange(startRow, startColumn, lengthApplied2, widthApplied2);//dynamically changes range size based on array size

range.setValues(arrayApplied2);

1 Ответ

0 голосов
/ 23 декабря 2018

setValues ожидает прямоугольный 2D-массив - массив, элементы которого сами являются массивами значений, которые должны быть установлены, и имеют одинаковую длину.Ваш код здесь не показывает, что такое listApplied, но использование split подразумевает, что это строка значений, разделенных запятыми.

Следовательно, arrayApplied является String[] (Array, чьи элементы String с).Метод Array#splice с 2 аргументами возвращает новый Array с измененным содержимым.который будет другим String[] с длиной 2. Например:

var a = 'Hello,There,Friend';
var aArr = a.split(','); // ['Hello', 'There', 'Friend']
var b = aArr.splice(0, 2); // b = ['Hello', 'There'] & aArr = ['Friend']

Если мы исчерпаем aArr путем сращивания в некоторый целевой массив, мы получим

var c = [
  ['Hello', 'There'],
  ['Friend']
];

Это действительно двумерный массив, но он не прямоугольный - один из элементов имеет длину 1, а остальные имеют длину 2.

В этом случае плохой элемент может быть только последним.В общем, возможно, есть какая-то другая операция, которая определяет элементы строки (вместо .splice(0, 2)), поэтому можно определить плохой элемент (и дополнить его, если необходимо) следующим образом:

function fixer_(input) {
  const maxLen = input.reduce(function (curMax, row) { return Math.max(curMax, row.length); }, 0);
  input.forEach(function (row, index) {
    if (row.length < maxLen) {
      console.log('Row index ' + index + ' was too short. Padding it with ""');
      row.push('');
    }
  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...