TypeError: невозможно прочесть свойство 'length', равное undefined (строка 13, файл «Код»). - PullRequest
1 голос
/ 02 августа 2020

Я впервые работаю с javascript, и я просто возился с листами Google.

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

function CompButton(){
  var event = 0
  var sheets = [
    ['Rebel_Outpost',"D6:D14","D18:D23","I6:I13","I17","I21:I23","N6:N22","N26:N34","S6:S21","S26:S31"],
    ['Advanced_Rebel',"D6:D9","D13","D17","D21:D25","I6:I20","I24","I28","N6:N20"],
    ['Market',"D7:D16","D20:D23","J7:J12","J16:J18","J22:J24","P7:P17","P21:P29"],
    ['Civilian_Shops',"D6:D18","D22:D36","I6:I12","I16","I20:I26","I30:I32","N6:N15","S6:S23","S30:S36"],
    ['Ground_Vehicles',"D7:D13","D17:D26","D30:D34","G7:G13","G17:G26","G30:G34"],
    ['Air_Vehicles',"D7:D22","G7:G22"],
    ['Water_Vehicles',"D7:D11","G7:G11"] 
  ];
  while (event < 7){
    for (var i = 1; i < sheets[event][i].length; i++){
      var sheet = SpreadsheetApp.getActive().getSheetByName(sheets[event][0]); 
      sheet.getRange(sheets[event][1]).setValue(0);
      event++;
    }
  }
}

https://gyazo.com/3f59c6fda652681667010058092c8ae7

, если вам нужен доступ к листу для проверки, опубликуйте его ниже

https://docs.google.com/spreadsheets/d/1bv6Fn6oKw4KaEM-xke0dOd87nVw2xk3W42Nnc1sKdJQ/edit?usp=sharing

https://script.google.com/d/12LMcV_meIdGgKANTeQjPcfMr2wC2ZdlZp_jxPRTAyCLTR8kJUHDuBbmu/edit?mid=ACjPJvE8t2PeFTxeOvw1nJ3Wif_B9lFXlFGCTluqR7XBLSsC9zWuQYo-ou_c1cJYw1MUP2njhNE-aZMqJ0NaJBspj91BQfD_p-o5n3JK6WgK2LZ_Sbjba5cTSN-qDOB9M5tYJy0KtE5DABw&uiv=2

Ответы [ 2 ]

0 голосов
/ 02 августа 2020

Я не уверен, что именно вы пытаетесь здесь сделать, но, возможно, вы найдете приведенный ниже синтаксис более читабельным.

sheets.map(sheet => {
    sheet.map((el, index) => {
        if(index !== 0) {
            // Perform operation on el
        }
    })
})

Для справки см. карту и forEach .

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

0 голосов
/ 02 августа 2020

Кажется, я понял:

var sheets = [
  ['Rebel_Outpost',"D6:D14","D18:D23","I6:I13","I17","I21:I23","N6:N22","N26:N34","S6:S21","S26:S31"],
  ['Advanced_Rebel',"D6:D9","D13","D17","D21:D25","I6:I20","I24","I28","N6:N20"],
  ['Market',"D7:D16","D20:D23","J7:J12","J16:J18","J22:J24","P7:P17","P21:P29"],
  ['Civilian_Shops',"D6:D18","D22:D36","I6:I12","I16","I20:I26","I30:I32","N6:N15","S6:S23","S30:S36"],
  ['Ground_Vehicles',"D7:D13","D17:D26","D30:D34","G7:G13","G17:G26","G30:G34"],
  ['Air_Vehicles',"D7:D22","G7:G22"],
  ['Water_Vehicles',"D7:D11","G7:G11"] 
];

function zeroRanges(sheetsArray) {
  for(var sheetItem of sheetsArray) {
    var sheetName=sheetItem[0];
    console.log("Working on sheet \""+sheetName+"\"");
    for(var rangeItemIndex=1; rangeItemIndex<sheetItem.length; rangeItemIndex++) {
      var range=sheetItem[rangeItemIndex];
      console.log("--Zeroing range\""+range+"\"");
      // uncomment next 2 lines
      // var sheet = SpreadsheetApp.getActive().getSheetByName(sheetName); 
      // sheet.getRange(range).setValue(0);
    }
  }
}

zeroRanges(sheets);

Я написал функцию zeroRanges, которой вы передаете sheets, используя zeroRanges(sheets). Таким образом, вы можете использовать его повторно. Когда вы копируете код, раскомментируйте 2 строки, в которых используется SpreadsheetApp - я закомментировал их здесь, чтобы мы могли видеть в журнале консоли, что функция работает (надеясь, что закомментированный код верен). Вы можете закомментировать / удалить строки console.log.

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