Я очень плохо знаком с 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);
}
});
, где я запутался:
Что такое function(row)
Ссылаться на?Мне кажется, что «строка» не является определенной переменной и также не является методом.
Какие объекты указываются в строке var colHvalue = row[7];
?И то же самое для второго ряда.
Как работает 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
пусто.Что мне не хватает?