I'm trying to push 1D array to a column but Im keep getting that error "Exception: The parameters (number[]) don't match the method signature for SpreadsheetApp.Range.setValues." which what I understood is that I cant use setValues for 1D array, it has to be 2D array or more.
Here is my code.
var range = ss.getRange(3,5,ss.getLastRow()-2).getValues();
var qValues = [];
for( var i=0; i<range.length; i ) {
qValues.push([range[i][0]]); // index 0 = column E.
}
var values = ss.getRange(3,14,ss.getLastRow()-2,11).getValues(); // N3:T??
var results = [];
for(var i=0; i<values.length; i ) {
results.push((([values[i][0] values[i][2] values[i][4] values[i][6] values[i][8] values[i][10]])*120*qValues[i][0])/1000); // index 0 = column N, etc.
}
ss.getRange(3, 27,).setValues(results);
I tried to add
results.push([""]);
before the setValues statement but it didn't work as well
If you need more info please let me know.
Thank you
CodePudding user response:
Flat array to column
function flatArraytoColumn() {
let a = [...Array.from(new Array(10).keys(), x => [x 1])];//second term of array.from returns each element in an array
const ss = SpreadsheetApp.getActive();
const sh = ss.getActiveSheet()
sh.getRange(1, 1, a.length, 1).setValues(a);//Post into column
Logger.log(a);//log array
}
Execution log
1:07:57 PM Notice Execution started
1:07:58 PM Info [[1.0], [2.0], [3.0], [4.0], [5.0], [6.0], [7.0], [8.0], [9.0], [10.0]]
1:07:59 PM Notice Execution completed
Active Sheet:
CodePudding user response:
Basically you need to convert your 1D array into 2D array to put it into a column. It can be done this way:
var arr = [1, 2, 3, 4];
var arr_2d = arr.map(x => [x]);
console.log(arr_2d); // > [[1],[2],[3],[4]]
For your case the last line could be something like this:
ss.getRange(3, 27, results.length, results[0].length).setValues(results.map(x => [x]));
But I don't know if your array is a valid array and what the range you want to fill. Probably in your case the array is not array at all.
Could you show the contents of the array results?
console.log(results)
Because this operation looks extremely weird:
([ values[i][0]
values[i][2]
values[i][4]
values[i][6]
values[i][8]
values[i][10] ]) * 120 * qValues[i][0]
I frankly don't understand what you're trying to gain.
Perhaps there shouldn't be the brackets [...]:
( values[i][0]
values[i][2]
values[i][4]
values[i][6]
values[i][8]
values[i][10] ) * 120 * qValues[i][0]

