getRange () с определенными критериями в скрипте листов Служб Google - PullRequest
0 голосов
/ 30 января 2019

Я очень плохо знаком с JavaScript, и только недавно начал возиться с кодированием.

Я нашел вопрос, который похож на тот, что я задаю, поэтому я попытался изменить предложения, чтобы они соответствовали моим потребностям, но я рисую бланк, объединяя другие ресурсы, чтобы понять решение.Этот вопрос и ответ здесь: range.getValues ​​() с определенной датой в определенной ячейке

Я надеюсь задать свой вопрос, добавив его в эту ветку, но я не могу сделатькомментарий - только ответ, так как у меня ноль голосов.

Я хочу знать, как я могу использовать функцию range.setValues ​​(), но указать только те строки ячеек, которые соответствуют определенным критериям (например, ячейка встолбец B = 1).

В основном я понимаю ответ, я думаю, - поместите полный список данных в другой массив, а затем используйте цикл for, чтобы определить, какие строки «сохранить».

Тем не менее, я не понимаю хорошего куска решения, особенно этой части:

data.forEach(function(row) {
  var colHvalue = row[7];
  var colKvalue = row[10];
  if( /* your desired test */) {
    // Add the name of the sheet as the row's 1st column value.
    row.unshift(sheetName);
    // Keep this row
    kept.push(row);
  }
});

, где я запутался:

  1. Что такое function(row)Ссылаться на?Мне кажется, что «строка» не является определенной переменной и также не является методом.

  2. Какие объекты указываются в строке var colHvalue = row[7];?И то же самое для второго ряда.

  3. Как работает push ing и unshift ing?

Надеемся на некоторые ответы,спасибо!

Редактировать:

Так что я до сих пор не понимаю подробную логику Ответа на этот другой вопрос, и написал что-то еще на основе этого:

 function importtest() {



  var sheetX = SpreadsheetApp.openById("XXX-XXX-XXX"); // workbook containing orginal data
  var tabX = sheetX.getSheetByName("EXPORTER"); // tab containing original data
  var rangeX = tabX.getRange(6,2,sheetX.getLastRow(),sheetX.getLastColumn()).getValues(); //range of full original data



var kept = [] ;
var data = rangeX ; //storing full data in "data"

// define function "latestrows", which fills up the "kept" array with selected rows
function latestrows() {
  var datesent = data[i][2] ; // indicating dynamic cell position (using variable i)  that determines if should be kept or not
  var datarow = data[i] ; // specify the entire row of data
  // loop statement; starting with i=0 (or row 1), and increasing until the last row of "data"
  for ( i = 0; i < data.length ; i++) {
    if (datesent == 1) { // if cell in the col indicating if it should be kept, is "1"
      kept.push(datarow); //move the chosen rows of data into "kept"
    }
  }
}

  var sheetX3 = SpreadsheetApp.openById("XXX-XX-XX"); // workbook import destination
  var tabX3 = sheetX3.getSheetByName("IMPORTED"); // import destination tab
  var rangeX3 = tabX3.getRange(7,3,kept.length,kept[0].length) // imported array range


  rangeX3.setValues(kept); // set values
 }

Я получаю сообщение об ошибке TypeError: Cannot read property "length" from undefined. (line 31, file "Code"), которое вместе с тестированием других модификаций указывает мне, что kept пусто.Что мне не хватает?

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