Report Builder
Я предполагаю, что вы хотите использовать эту функцию для создания разных отчетов из одного и того же набора данных.Поэтому я мог бы попробовать что-то вроде этого:
Функция:
function testFour(t4Obj) {
var ss=SpreadsheetApp.openById(t4Obj.ssId);
var srcsh=ss.getSheetByName(t4Obj.srcShName);
var dessh=ss.getSheetByName(t4Obj.desShName);
var colA=String(t4Obj.zbcols).split('~~~');
var tstCol=Number(t4Obj.zbtstCol);
var tstVal=t4Obj.tstVal;
var srcrg=srchsh.getDataRange();
var srcvA=srcrg.getValues();
var desvA=[];
for (var i=0;i<srcvA.length;i++) {
var tA=[];
if (srcVa[i][tstCol]==tstVal) {
for (var j=0;j<colA.length;j++) {
tA.push(colA[j]);
}
desvA.push(tA);
}
}
dessh.getRange(1, 1, desvA.length, desvA[0].length).setValues(desvA);
}
Таблица данных t4Obj:
Конечно, вам придется создать себе функцию, которая загружает t4Obj из приведенной выше таблицы.Посмотрев на ваш код, я думаю, что это не составит для вас проблем.
И, пожалуйста, обратите внимание, что я не тестировал ни один из этого кода, поэтому крайне маловероятно, что он будет работать в первый раз из коробки.Вы можете оттачивать свои навыки отладки на этом.
Давайте попробуем создать массив для квадратного диапазона, в котором число увеличивается на единицу в одной и той же позиции столбца в каждой строке.Массив будет выглядеть так:
var A=[[1,6,11,16,21],[2,7,12,17,22],[3,8,13,18,23],[4,9,14,19,24][5,10,15,20,25]];
Создание массива вручную
function makeArray() {
var A=[[1,6,11,16,21],[2,7,12,17,22],[3,8,13,18,23],[4,9,14,19,24],[5,10,15,20,25]];
var ss=SpreadsheetApp.getActive();
var sh=ss.getActiveSheet();
var rg=sh.getRange(5,5,5,5);//could be this way
//var rg=sh.getRange(5,5,A.length,A[0].length);//or in most programs this way
rg.setValues(A);
}